Доступ к методу в динамически создаваемых пользовательских элементах управления?

Так что я все еще учусь и много таращусь, но я просто не могу понять, как получить доступ к методу внутри динамически создаваемого пользовательского элемента управления.

Мне удалось заставить это работать:

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) поэтому я не вижу необходимости получать другую ссылку.

Другие вопросы по тегам