Динамические события в UserControl - PullRequest
0 голосов
/ 24 ноября 2010

Я создал пользовательский UserControl с помощью графического интерфейса и не могу заставить его принимать динамически добавленные события из пользовательского класса. Извините, если я неправильно понял точный код, если исходить из памяти, но вы понимаете суть. C # .NET 2008, Winform

У меня есть «контейнерный класс», в котором хранится вся моя информация.
Основной WinForm имеет их массив, и у каждого из них есть сводная панель. Основная форма также имеет «рабочую зону», которая позволит вам получить доступ к классу контейнера.

Идея заключается в том, что взаимодействие с CustomUserControl приведет к тому, что внутри ContainerClass произойдет нечто. Элемент управления использует информацию оттуда, и я хочу, чтобы она обновлялась изнутри.

ContainerClass
{
    CustomUserControl tempControl;
    public ContainerClass()
    {
        //do stuff
        tempControl = new CustomUserControl([send information]);
        tempControl.Click += new Event(localClickEvent);
    }

    public void localClickEvent(object sender, Event e)
    {
        //do stuff
    } 
}

.

public class Form1
{
    public Form1()
    {
        //create several container objects
        //for each container object, get it's SummaryPanel 
        //and add it to the FlowLayoutPanel
        CustomUserControl tempControl = ContainerObject.GetCustomControl();
        flp_summaryPanel.Controls.Add(tempControl);
    }
}

Когда я выполняю этот код, динамическое событие никогда не запускается. Я делал подобные вещи раньше, но это всегда было с пользовательскими классами, которые наследовали необходимый мне элемент управления. Я никогда не наследовал UserControl, поэтому подозреваю, что что-то пропустил. Я предполагаю, что это проблема защиты, но компилятор ее не ловит.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Это как-то помечено как вопрос ASP.net. Это не так, я использую Winforms, хотя я никогда не говорил об этом.

Еще одна важная вещь: динамическое событие не находится в другом элементе управления. Он находится в пользовательском классе, который функционирует как большой контейнерный объект.

. .

Как всегда, большое спасибо за вашу помощь! :)

Ответы [ 2 ]

0 голосов
/ 24 ноября 2010

Какую версию C # вы используете? Попробуйте это:

public void ParentControl_Init()
{
    CustomUserControl tempControl = new CustomUserControl(); 
    this.Controls.Add(tempControl); 
    tempControl.Click += localClickEvent; 
}

public void localClickEvent(object sender, EventArgs e) 
{ 
    //do stuff 
}  

Вы не хотите добавлять элементы управления и прикреплять события в конструкторе. Посмотрите, как это делает ASP.NET, и вы поймете, почему.

0 голосов
/ 24 ноября 2010

Попробуйте подключить обработчик событий после добавления элемента управления в Controls collection

public ParentControl()
{
    CustomUserControl tempControl = new CustomUserControl();
    this.Controls.Add(tempControl);
    tempControl.Click += new Event(localClickEvent);
}

Это может быть связано с тем, что, если элемент управления не добавлен в NamingContainer, идентификатор клиента не может быть сгенерирован должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...