Предотвращение Bubbling события С#
Предположим, что у меня есть событие KeyPress
, подписанное различными классами. Предположим, что класс A также подписывается на KeyPress
в форме, а класс B также подписывается на KeyPress
Теперь я хочу, чтобы только один из этих классов обрабатывал событие, запущенное Формой во время выполнения. Это означает, что сначала используется класс A, я попытался использовать e.Handled = true
, но это не помогает в этом случае.
Я не хочу, чтобы класс B обрабатывал событие, выпущенное из формы, если класс A уже обработан, у меня есть работа в настоящее время, которая включает настройку некоторых общедоступных флагов внутри A и B, но это не очень хорошая идея из программного обеспечения Я хочу, чтобы классы были как можно независимы друг от друга, но в то же время должны знать, что событие уже обработано и не нужно обрабатывать снова.
Возможно ли это?
Да, возможно, нужно проверить e.Handled == true
, а .NET позаботится об остальном: -)
Ответы
Ответ 1
Вам нужно проверить e.Handled внутри каждого обработчика событий следующим образом Пример Gist, который я создал.
В основном каждый обработчик должен проверить e.Handled == true и вернуть, если он уже обработан. Свойство Handled не блокирует обработку события, оно только отбрасывает аргументы для каждого подписанного события.
В моем примере класс Form1 всегда обрабатывает событие первым, потому что он подключен в конструкторе Form1. Таким образом, установив в этом случае e.Handled = true, а затем проверив e.Handled == true в других событиях, я могу сразу вернуться сразу, когда e.Handled == true.