Доступ к методу в динамически создаваемых пользовательских элементах управления?
Так что я все еще учусь и много таращусь, но я просто не могу понять, как получить доступ к методу внутри динамически создаваемого пользовательского элемента управления.
Мне удалось заставить это работать:
Control picture = new UserControl1();
picture.Visible = true;
picture.Name = "PIC1";
picture.Location = new Point(0, 0);
picture.Show();
flowLayoutPanel1.Controls.Add(picture);
(UserControl1)picture).SetMSG("Test");
Но я хочу обратиться к каждому экземпляру элемента управления по его имени следующим образом:
Control picture = new UserControl1();
picture.Visible = true;
picture.Name = "PIC1";
picture.Location = new Point(0, 0);
picture.Show();
flowLayoutPanel1.Controls.Add(picture);
(UserControl1)PIC1).SetMSG("Test");
Я думаю, что я просто неправильно понимаю всю концепцию?
2 ответа
Решение
Вы можете сохранить ссылку на динамически созданные элементы управления в своем представлении:
class MyView
{
public void CreateControl(string name)
{
Control picture = new UserControl1();
picture.Visible = true;
picture.Name = name;
picture.Location = new Point(0, 0);
picture.Show();
flowLayoutPanel1.Controls.Add(picture);
this.controls.Add(name, picture);
}
public void SetMsg(string name, msg)
{
((UserControl1)this.controls[name]).SetMSG(msg);
}
private Dictionary<string, Control> controls = new Dictionary<string, Control>();
}
Я думаю, что я просто неправильно понимаю всю концепцию?
Да, вы. Вы не можете просто использовать название элемента управления, как это. Вы могли бы сделать:
var PIC1 = flowLayoutPanel1.Controls.Find("PIC1",false);
но у вас уже есть ссылка на элемент управления (picture
) поэтому я не вижу необходимости получать другую ссылку.