#c# #winforms #events #user-interface
#c# #winforms #Мероприятия #пользовательский интерфейс
Вопрос:
Если у меня есть следующая форма:
Скриншот здесь
Форма имеет несколько пользовательских элементов управления (оранжевый), которые также содержат несколько пользовательских элементов управления (зеленый).
Мои вопросы:
1) Если я добавлю дополнительный «зеленый» пользовательский элемент управления к одному из «оранжевых» пользовательских элементов управления, каков наилучший способ подключить этот новый «зеленый» пользовательский элемент управления к событию кнопки в основной форме (без «оранжевого» или «зеленого» пользовательского элемента управления, знающего об основной форме)?
Я думал запустить событие из ‘orange’ usercontrol в основную форму с ‘green’ usercontrol в качестве параметра, а затем обработать подключение в основной форме.
2) Есть ли более подходящие «места» для обработки этого подключения?
3) Если все «зеленые» пользовательские элементы управления должны подключаться к событию друг друга (например, если значение изменяется в одном из них, все остальные должны быть проинформированы), каков наилучший способ? Я думал о создании одноэлементного класса EventManager для обработки этого?
Я действительно борюсь с комбинацией слабо связанных пользовательских элементов управления и их подключением.
Я надеюсь, что мой вопрос ясен.
Заранее спасибо, Кевин
Комментарии:
1. AVG сказал мне, что в вашей ссылке imageshack что-то не так. Я уверен, что это не твоя вина, но, чувак, будь осторожен. Ложный результат?
Ответ №1:
Вот как я думаю об этом, любой элемент управления / класс должен отвечать за настройку самого себя и общедоступного интерфейса своих непосредственных дочерних элементов. Пользователю класса или элемента управления не должны требоваться какие-либо знания об этом родительском элементе или какие-либо внутренние знания о его дочерних элементах.
Итак, в вашем примере оранжевые элементы управления должны подписываться на события зеленых элементов управления и действовать соответствующим образом, возможно, вызывая свое собственное событие для родительского элемента управления и или, возможно, изменяя какое-либо поле для родственного элемента управления зеленого цвета. Когда зеленые элементы управления добавляются и удаляются из оранжевого, оранжевый элемент управления отвечает за поддержание своей внутренней «проводки». Это верно, независимо от того, произошло ли это в общедоступном или частном методе на orange, если хост способен выполнять это через некоторую доступную коллекцию на orange, логика для этого должна быть инкапсулирована в orange.
Это утверждение одинаково верно, рассматриваем ли мы оранжевый, хост, зеленый или любой другой класс / элемент управления.
С точки зрения кодирования вы захотите использовать =
и -=
с моделью многоадресного делегирования подписка на события при добавлении и удалении элементов управления. Обработчики будут закодированы соответствующим образом.
Комментарии:
1. Итак, если я правильно понимаю, я должен создать событие valueChanged в green и orange usercontrols и разрешить основной форме подписаться на событие valueChanged в orange, а orange — на событие valueChanged в green. <br> Как только значение в зеленом цвете изменится, orange будет проинформирован, а затем сможет вызвать его событие valueChanged в основной форме?<br<br> Как только это произойдет, каков наилучший способ сообщить другим пользовательским элементам управления orange? Напрямую через общедоступный метод или также через events. (Во втором случае, где я должен выполнить это подключение? Передайте mainform в orange, чтобы orange мог подключаться сам?) Спасибо