Реализация события UserControl для родителя - PullRequest
1 голос
/ 10 февраля 2011

enter image description here

Я конвертирую приложение Delphi 7.0 в .Net (2.0).

В приложении Delphi есть аналогичная реализация, такая как «Контроль пользователя», поэтому я тоже сделал то же самое в своем приложении C #.

Но в Delphi можно кодировать реализации событий UserControl на main (родительском), вряд ли в .Net это необходимо (не обязательно) делать на уровне UserControl.

Мои вопросыявляются,

  1. Разве мы не можем сделать то же самое в .Net?
  2. Альтернативный метод (прямой) способ сделать это

Примечание: я достигчто я хочу через делегатов / события, но я предпочитаю способ сделать это в Delphi

1 Ответ

1 голос
/ 10 февраля 2011

Вы можете сделать это несколькими альтернативными способами:

  1. Сделать элементы управления (сгенерированные дизайнером) в пользовательских элементах управления как публичные или внутренние (возможно, установив свойство Модификаторы вконтроль свойств).Затем вы можете написать код, такой как UserCtr1.UserCtr2.UserCtrl3.Btn1, для ссылки на кнопку и присоединить к ней обработчик событий в коде формы.Я не буду предпочитать этот подход, потому что он нарушает инкапсуляцию.Но если вы полагаете, что пользовательские элементы управления - это просто шаблон пользовательского интерфейса (без какого-либо поведения), то это может сработать для вас.
  2. Еще один способ - использовать локальные обработчики событий в управляющем коде.но заставить их вызывать соответствующие методы из формы.Это можно сделать с помощью свойства TopLevelControl.Например, в пользовательском коде Ctrl 3

    private void Btn1_Click (отправитель объекта, EventArgs e) {((FormMain) this.TopLevelControl) .Search (param1);}

Проблема с этим подходом заключается в тесной связи с формой, и способ ее решения состоит в том, чтобы внедрить некоторый интерфейс для вызова функций из пользовательского контроля.Форма может реализовать интерфейс.Экземпляр (интерфейса) может быть внедрен во все пользовательские элементы управления с помощью некоторой инфраструктуры IoC Container / DI.

...