C # .NET Как динамически получать доступ к полям в пользовательском элементе управления?

В данный момент я делаю экран настроек, в котором будет группа радиокнопок, которая будет определять, какие элементы управления отображаются. Различные настройки содержатся в UserControl.

Я динамически создаю этот UserControl следующим образом:

panel = new btSettings();
this.Controls.Add(panel);
panel.Location = new Point(15, 49);

Просто интересно, как я могу получить доступ к полям в этом элементе управления и во время разработки, когда объект будет создан только во время выполнения?

Спасибо.


person jim    schedule 16.03.2010    source источник


Ответы (4)


Вам нужно будет использовать косвенные ссылки, чтобы делать то, что вы хотите сделать. Прошло некоторое время с тех пор, как я работал с пользовательскими элементами управления, но контейнерные элементы управления должны поддерживать коллекцию Controls (или Children), которая будет возвращать существующие в ней элементы управления. Затем вам нужно будет перебрать их, привести к нужным вам типам и работать с ними. Например:

Foreach(Control target in panel.Controls) {
   if (target.GetType() == typeof(RadioButton) {
      ((RadioButton)target).Checked = true;
      //etc...
   }
}
person GrayWizardx    schedule 16.03.2010

Отвечая на ваш вопрос...

Просто интересно, как я могу получить доступ к полям в этом элементе управления и во время разработки, когда объект будет создан только во время выполнения?

Если вам нужно работать с элементом управления во время разработки, я думаю, что единственный способ — создать настраиваемый элемент управления и перетащить его в форму.

person Javier    schedule 16.03.2010

Вы не можете получить несуществующий объект во время разработки.

person Andrew Bezzub    schedule 16.03.2010

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

person Dan McClain    schedule 16.03.2010