Как потомок UserControl может перехватывать события, запускаемые его базовым классом? - PullRequest
3 голосов
/ 21 января 2009

У меня есть базовый UserControl (BaseControl.cs), на котором есть кнопки ОК и Отмена. Когда кнопки нажаты, происходит событие. Обычно другие объекты UserControl наследуются от BaseControl. Наконец, объекты-потомки UserControl помещаются в WinForm, где они подключаются к событиям для нажатия кнопок Ok / Cancel.

У меня такой вопрос: в элементе управления потомка я бы хотел перехватить события (чтобы выполнить некоторую проверку). Как можно (или перехватить) эти события?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 21 января 2009

Стандартный шаблон для реализации событий заключается в использовании виртуального метода «OnXxx», например:

public event EventHandler OkClick;
protected virtual void OnOkClick(EventArgs e)
{
    if (OkClick != null) OkClick(this, e);
}

Теперь каждый раз, когда ваш базовый элемент управления хочет вызвать событие OkClick, он просто вызывает:

OnOkClick(EventArgs.Empty);

Это означает, что потомки вашего базового элемента управления могут переопределить OnOkClick следующим образом:

protected override void OnOkClick(EventArgs e)
{
    // do some stuff before the event is fired
    base.OnOkClick(e);
    // do some stuff after the event is fired
}

Обратите внимание, что в руководствах по разработке структуры фактически говорится, что вы должны реализовать метод "OnXxx" таким образом, чтобы событие вызывалось, даже если классы-потомки забывают вызвать базовый метод. Я действительно не знаю хорошего способа сделать это, и я уверен, что большинство людей игнорируют это руководство.

0 голосов
/ 21 января 2009

Обычно вы создаете метод protected virtual Validate(), который вызывается в обработчиках событий BaseControl. Затем в DescendantControl вы будете override метод Validate().

Вот некоторая документация по Наследованию .

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