我的WinForms应用程序中有多个ComboBox,它们都使用DropDownList样式。它们没有选择默认值,我希望它们都能自动显示第一个值而无需用户选择任何内容。
首先,我尝试通过以下方式设置每个ComboBox的selectedValue:
ComboBox1.SelectedIndex = 0;
但我不知道在哪里放这个代码。理想情况下,每个ComboBox初始化时都会执行一次,但我不知道这是否可行。
然后我想我可以将代码放入整个Form的加载方法中:
private void GUI_Load(object sender, EventArgs e)
{
ComboBox1.SelectedIndex = 0;
ComboBox2.SelectedIndex = 0;
}
这可行,但随着ComboBoxes的数量变大,这会变得很烦人。所以我想到这样循环:
private void GUI_Load(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
{
if (c is ComboBox)
{
ComboBox combo = (ComboBox)c;
combo.SelectedIndex = 0;
}
}
}
由于某些原因,这不起作用;它循环的唯一控件只是Panels而不是别的。
这个循环我做错了什么?这里最好的解决方案是什么?
答案 0 :(得分:1)
/// <summary>
/// For use with Windows Forms
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="controlCollection"></param>
/// <param name="resultCollection"></param>
public static void GetControlsRecursiveWin<T>(System.Windows.Forms.Control.ControlCollection controlCollection, List<T> resultCollection) where T : System.Windows.Forms.Control
{
foreach (System.Windows.Forms.Control control in controlCollection)
{
if (control is T)
resultCollection.Add((T)control);
if (control.HasChildren)
GetControlsRecursiveWin(control.Controls, resultCollection);
}
}
用法:
List<ComboBox> lstDDL = new List<ComboBox>();
GetControlsRecursiveWin<ComboBox>("<name of yourpanel>".Controls, lstDDL);
这将生成该控件中ComboBox类型的所有控件的列表。然后,您可以迭代并将这些控件设置为所需的值。