C #: Как получить доступ к публичному члену пользовательского элемента управления из другого пользовательского элемента управления - PullRequest
0 голосов
/ 18 апреля 2011

Я работаю над формой заявления Windows.У меня есть CustomControl (скажем, MasterControl), на котором я установил разделенную панель, и теперь мой MasterControl разделен на три части:

  • Pannel1
  • Pannel2
  • Pannel3

Теперь я разрабатываю три пользовательских элемента управления и помещаю по одному в каждую из панелей, например,

  • Pannel1 имеет CustomControl1
  • Pannel2 имеет CustomControl2
  • У Pannel3 есть CustomControl3

Теперь где-то в CustomControl3 мне нужен доступ к общедоступному члену CustomControl1.Для которого я написал следующий код:

((MasterControl)this.Parent)._oCustomControl1.PublicMember = this.PublicMember;

Код выше не работает в моем случае.Когда эта строка кода выполняется в режиме отладки, появляется окно с сообщением, что «для текущего местоположения нет кода»

Ответы [ 3 ]

3 голосов
/ 18 апреля 2011

Это очень плохой дизайн для ваших элементов управления, который зависит от того, как они расположены на родительском контейнере.

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

Ваш код очень легко сломается, если его вообще можно скомпилировать - я думаю, что проблема, с которой вы столкнулись, заключается в порядке компиляции: для того, чтобы ваша родительская форма была скомпилирована, она должна иметь законченные дочерние элементы управления , С другой стороны, созданные пользователем элементы управления должны иметь законченную форму.

Было бы намного лучше установить любое поведение, которое вам нужно, из контейнера этих элементов управления - например, реагируя на события из элемента управления и устанавливая соответствующие вещи в соответствующих других элементах управления (есть и другие способы, конечно же, конечно). - дело в направлении и потоке информации - кто что настраивает и что использует).

2 голосов
/ 18 апреля 2011

Если у вас есть разделенная панель в вашем главном элементе управления, вам нужно подняться на два уровня вверх, чтобы найти свой главный элемент управления:

((MasterControl)this.Parent.Parent)._oCustomControl1.PublicMember = this.PublicMember;
0 голосов
/ 19 апреля 2011

Я нашел ответ сам.Я пишу здесь, потому что это может помочь кому-то еще.Точный код:

((MasterControl)this.Parent.Parent.Parent)._oCustomControl1.PublicMember = this.PublicMember;

В основном мой coustomcontrol3 лежит внутри разделенной панели контейнера, поэтому, когда я написал: this.Parent, он указывает на панель, в которой он находится, и если я написал this.Parent.Parent, тоон указывает на контейнер-разделитель, в котором находится указанная выше панель, и если я написал this.Parent.Parent.Parent, то он указывает на элемент управления, в котором находится этот разделенный контейнер

. Я понял идею из ответа "Farzin Zaker", поэтому благодаря емуза его вклад

...