Что эквивалентно пузырьковым событиям JavaScript в .NET? - PullRequest
1 голос
/ 01 ноября 2010

Я думаю, что в Javascript есть механизм, который позволяет перебрасывать события сверху вниз. Что эквивалентно в .NET WINFORM (не ASP.NET)?

События / Делегаты в .NET автоматизируют шаблон Observer / Design, избегая субъекта, обрабатывающего отправку обновлений сообщений подписчикам, поэтому я не вижу никакой фундаментальной причины, по которой не могло существовать пузырьков.

События / Делегаты допускают слабую связь по сравнению с использованием IObserver, точно так же, если бы была реализована пузырьковая связь, она также позволяла бы слабую связь вместо выполнения наследования и проводного соединения с базовым родителем.

Ответы [ 3 ]

2 голосов
/ 01 ноября 2010

Это имеет очень мало общего с JavaScript, пузыри являются свойством DOM.Который представляет документы в древовидной иерархии, что делает естественным передачу событий, которые не обрабатываются в дереве.

Это почти не соответствует также в иерархии окон.Главная проблема заключается в том, что если вы глубоко вложите окна, то вы сами станете собакой программы, которая тянет пользовательский интерфейс вечно.Тем не менее, стандартная оконная процедура отправляет сообщения пузырькового окна родителю.Это избирательное поведение, оно зависит от конкретного сообщения.Сообщение WM_MOUSEWHEEL, например, всплывающее, ищет родительское окно, которое знает, как прокрутить представление.Но WM_LBUTTONDOWN не всплывает, родительское окно обычно не имеет большого смысла для щелчка мышью по области, которой оно не «владеет».Кроме того, что возможно установить фокус на элемент управления, то, что уже происходит автоматически.

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

2 голосов
/ 01 ноября 2010

Привет, ты можешь сделать это в .net

см. эту статью

и это

0 голосов
/ 01 ноября 2010

Нет такой вещи. Если вы хотите передать событие своему родителю, используйте параметр sender для вашего события, приведите его к Control, вызовите метод Parent и запустите событие там.

Тем не менее, вы, вероятно, не должны делать это. Платформа .NET не является Javascript. В Риме делай так, как делают римляне.

Действительно, события в .NET совсем не похожи на события Javascript ... они представляют собой просто список делегатов. Повышение события приводит к тому, что все делегаты вызывают. События могут быть размещены на всех объектах, а не только на объектах с графическим интерфейсом. Поэтому не имеет смысла определять их как исключительно концепцию графического интерфейса.

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