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

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

Я хочу, чтобы события дочернего элемента управления передавались полностью в родительское окно. Например, дочернее окно на панели имеет кнопку " Cancel, которая должна закрыть ее. Я бы хотел, чтобы родительский элемент управления, т.е. Главное окно закрылось, но как я могу перехватить событие нажатия кнопки дочернего элемента управления?

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

Ответ 1

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

Поднять событие от ребенка:

public event EventHandler CloseButtonClicked;
protected virtual void OnCloseButtonClicked(EventArgs e)
{
    var handler = CloseButtonClicked;
    if (handler != null)
        handler(this, e);
}
private void CloseButton_Click(object sender, EventArgs e)
{
    //While you can call 'this.ParentForm.Close()' it better to raise an event
    OnCloseButtonClicked(e);
}

Подписаться и использовать событие в Parent:

//Subscribe for event using designer or in form load
this.userControl11.CloseButtonClicked += userControl11_CloseButtonClicked;

//Close the form when you received the notification
private void userControl11_CloseButtonClicked(object sender, EventArgs e)
{
    this.Close();
}

Чтобы узнать больше о событиях, взгляните на: