Как настроить делегатов между моими классами? - PullRequest
6 голосов
/ 14 июля 2010

Я работаю с небольшим количеством кода, который структурирован следующим образом:

Форма A имеет пользовательские элементы управления B и G внутри. Пользовательский элемент управления B содержит пользовательский элемент управления D, а пользовательский элемент управления D имеет метод «обновления». Пользовательский элемент управления G имеет внутри себя пользовательский элемент управления F, а пользовательский элемент управления F должен вызывать метод "refresh" в D.

1) Если не считать реструктуризации кода (это унаследованный код, так что он не рассматривается в качестве опции), являются ли делегаты лучшим способом решения этой проблемы? Если нет, у вас есть другое предложение?

2) У меня нет опыта работы с функциями делегатов - есть ли хороший пример или пример, который я мог бы использовать для адаптации к своему коду для достижения желаемой функциональности?

Ответы [ 2 ]

4 голосов
/ 14 июля 2010

Во-первых, F не должен ничего знать о D и его функции обновления.Добавьте событие к F, которое вызывается при необходимости.Если форма A знает о F, подпишитесь на это событие из A. Если нет, создайте подобное событие в G и подпишитесь на него в A. В обработчике событий A вызовите Refresh напрямую или вызовите метод B, который вызывает D.refresh.

Похоже, мой ответ даже менее читабелен, чем ваш вопрос :) Это должно выглядеть так:

F вызывает событие -> G обрабатывает событие F и поднимает событие -> A обрабатывает событие Gи вызывает метод B -> вызов метода B D.refresh

0 голосов
/ 14 июля 2010

Для делегатов см. Это: http://www.akadia.com/services/dotnet_delegates_and_events.html

Для событий вы должны убедиться, что материал проходит в правильном порядке. В текущем сценарии я предполагаю, что хорошим способом было бы выставить Событие из G, которое должно срабатывать, когда что-то в F меняется. И у нас будет обработчик, подписанный на это событие в B, который в конечном счете вызовет refresh. Будет задействовано еще несколько событий и делегатов, чтобы передать вызовы от родителя к потомку и наоборот. Имейте в виду концепцию механического устройства: часть, которая НАЧИНАЕТ движение, является той, которая запускает (вызывает событие) для других. Когда другие двигаются, они запускают другие связанные части ... и в конце концов что-то далеко движется. Надеюсь, это поможет.

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