C#set ComboBox DropDownList默认值OR循环遍历所有CheckBoxes

时间:2014-06-20 20:30:07

标签: c# winforms combobox

我的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而不是别的。

这个循环我做错了什么?这里最好的解决方案是什么?

1 个答案:

答案 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类型的所有控件的列表。然后,您可以迭代并将这些控件设置为所需的值。