C # winforms / UserControls - Как вызвать событие от UserControl1 до UserControl2 - PullRequest
0 голосов
/ 06 ноября 2011

Я пытаюсь вызвать событие Button1_Click, расположенное в UserControl2, из UserControl1.

Элементы управления загружаются динамически из моей основной формы

//UserControl2
public partial  class ItemsModule : UserControl
{
        private void ButtonRefreshProperties_Click(Object sender, EventArgs e)
        {
            RefreshControls();
        }
        public void RefreshControls()
        {
            SomeCode();
        }
}

/// MainForm this is how i add the Control from the Main Form

ItemsModule im = new ItemsModule();
im.Name = "ItemsModule";
flpModules.Controls.Add(im);

//UserControl1
public partial class TreeViewControl :  UserControl
{
    private void ItemTreeView_MouseDoubleClick(Object sender, MouseEventArgs e)
    {
        String ItemId = ItemTreeView.SelectedNode.Name;
        Variables.CurrentItemID = ItemId;
        if (LoadedModules.Items)
        {
            //Here I would like a way to trigger ItemsModule.ButtonRefreshProperties_Click
        }
    }

}  

1 Ответ

2 голосов
/ 06 ноября 2011

UserControl1 нужно будет иметь ссылки на UserControl2.Если у вас есть ссылка UserControl1, следует вызвать метод на UserControl2, который вызывает событие.

Вы можете передать ссылку на UserContro2 в UserControl1 через конструкторили свойство в зависимости от структуры вашего приложения.Вы должны хранить ссылку в закрытом поле UserControl1, чтобы вы могли получить к ней доступ из обработчика события DoubleClick.

Также можно установить это другими способами.Вы можете сделать UserControl2 свойством родительской формы, тогда UserControl1 может привести его свойство .Parent к правильному типу и использовать это свойство в качестве ссылки.

Вы также можете настроить третий класскак singleton, который имеет ссылку на UserControl2.

Общим для всех этих решений является то, что каким-то образом UserControl1 должна иметь ссылку на UserControl2, чтобы иметь возможность что-либо делать

Вы можете избежать проблемы со ссылками, если UserControl1 вызовет событие, которое слушает его родительская форма.Поскольку родительская форма уже должна иметь ссылку на все элементы управления, вы можете сделать так, чтобы форма прокси вызывала для вас UserControl2.

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