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これらのコントロールはメインフォームのすぐ下にしか表示されません。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 に答える