2012-05-06 3 views
1

У меня есть форма с шестнадцатью комбинированными ящиками, каждая из которых имеет свойство DropDownStyle, установленное на DropDownList. Я пытаюсь установить форму, чтобы каждый элемент управления показывает свое первое предварительно определенное значение:C# Combobox dropdownlist item type

private void Form1_Load(object sender, EventArgs e) 
    { 
     foreach (ComboBox DropDown in this.Controls.OfType<ComboBox>()) 
      DropDown.SelectedIndex = 0; 
    } 

Этот код не работает, хотя по отдельности назначая каждый элемент делает. Любые идеи почему?

+0

Это интересно. Вы уверены, что 'this.Controls.OfType ' действительно возвращает список combobox? Попробуйте отладить его - действительно ли вы получаете 16 элементов управления, которые вы ожидаете? –

+0

Теперь, когда я думаю об этом, на самом деле, это не то, что можно задать во время разработки? Зачем вам это нужно установить в 'Form_Load'? –

+0

@ AvnerShahar-Kashtan Это не похоже, и я понятия не имею, почему ... (Я не слишком опытен с C#.) «Перечисление не дало результатов» - это сообщение, которое я вижу. – lpd

ответ

1

Мой опыт WinForm является немного ржавый, но если я правильно помните, this.Controls приведет только те элементы управления непосредственно под основной формой. Если у вас есть какие-либо субконтроллеры, например Groupbox, они будут находиться под этим групповым ящиком. Controls.

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

+0

'foreach (GroupBox OptGroup в этом.Controls.OfType ()) { foreach (ComboBox DropDown в OptGroup.Controls.OfType ()) DropDown.SelectedIndex = 0; } ' – lpd

0

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

foreach (Control MyCtrl in this.Controls) 
{ 
    DoAllRichTextBoxes(MyCtrl); 
} 

void DoAllRichTextBoxes(Control control) 
{ 
    ComboBox Cmb = control as ComboBox; 
    TextBox TxtBx = control as TextBox; 
    if (Cmb == null && TxtBx == null) 
    { 
     // deal with nested controls 
     foreach (Control c in control.Controls) DoAllRichTextBoxes(c); 
    } 
    if (Cmb != null) 
    { 
     Cmb.GotFocus += new EventHandler(this.Tb_GotFocus); 
     Cmb.LostFocus += new EventHandler(this.Tb_LostFocus); 
     Cmb.KeyDown += new KeyEventHandler(this.VehComn_KeyDown); 
     Cmb.SelectedValueChanged += new EventHandler(this.AllCombos_SelectedValueChanged); 
    } 
    if (TxtBx != null) 
    { 
     TxtBx.GotFocus += new EventHandler(this.Tb_GotFocus); 
     TxtBx.LostFocus += new EventHandler(this.Tb_LostFocus); 
     TxtBx.KeyPress += new KeyPressEventHandler(this.TbCmb_KeyPress); 
     TxtBx.KeyDown += new KeyEventHandler(this.VehComn_KeyDown); 
    } 
} 
+0

Компилирует, но не работает, но все комбинированные поля по-прежнему отображаются пустым :( – lpd