1

我有一个包含 16 个组合框的表单,每个组合框的DropDownStyle属性都设置为DropDownList. 我正在尝试设置表单,以便每个控件显示其第一个预定义值:

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

此代码不起作用,尽管单独分配每个项目可以。任何想法为什么?

4

2 回答 2

1

我的 WinForm 体验有点生疏,但如果我没记错的话,this.Controls只会带你直接在主 Form 下的那些控件。如果您有任何子控件,例如 Groupbox,它们将位于该 groupbox 的 . Controls.

您可以显式地迭代 Groupbox 的控件,也可以使用递归遍历表单的所有子控件,就像您在此处看到的那样。

于 2012-05-06T06:58:18.950 回答
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);
    }
}
于 2012-05-06T06:25:54.200 回答