Какой-нибудь умный шаблон для выполнения Bubbling и Tunneling для событий на Winforms?

Можем ли мы выполнить на Winforms как Tunneling, так и Bubbling? Может быть, с помощью перехвата сообщений API? Любая статья об этом?


person jmayor    schedule 28.10.2009    source источник


Ответы (1)


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

Если вам нужно такое поведение, я рекомендую просто использовать WPF.

person Reed Copsey    schedule 28.10.2009
comment
Хорошо, я согласен .. но для существующего элемента управления, по крайней мере, всплывающее окно может быть реализовано путем получения сообщения Windows и отправки его в родительский элемент управления? - person jmayor; 28.10.2009
comment
Каждый элемент управления в цепочке должен будет делать это, и делать это согласованным образом. В основном вам нужно будет реализовать всю свою собственную библиотеку управления, в дополнение к изменению EventArgs на тип, который обрабатывает маршрутизацию (чтобы вы могли пометить его как обработанный и предотвратить его продолжение). Простая повторная отправка сообщения не поможет, так как вы потеряете информацию об элементе управления, вызвавшем сообщение, и т. д. Опять же, если вам нужна функциональность WPF, я бы просто использовал WPF. - person Reed Copsey; 28.10.2009
comment
Большое спасибо .. Я люблю WPF, но у меня есть одна проблема: хорошо ли WPF отображается в среде удаленного рабочего стола? Это единственное, что меня останавливает, потому что я думаю, что переделать весь элемент управления в WPF может быть проще, чем реализовать все эти всплывающие события в WinForms. - person jmayor; 28.10.2009
comment
Удаленный рабочий стол в порядке, службы терминалов в порядке, но зависит от того, что вы используете. Если вы используете стандартный WPF (например, не пытаетесь разместить D3D в WPF), он отлично работает, особенно после .NET 3.5sp1. - person Reed Copsey; 28.10.2009