0

グループボックスの名前はTextInfoGroupBoxです..その中のtextBoxesにアクセスしようとしてGroupBoxい ますが、方法がわからない..次のようなものを試しました:TextBoxesLabels

TextInfoGroupBox.innerTextbox;
TextInfoGroupBox.Controls.GetChildControl;

これらは両方ともインテリジェンスにポップアップしませんでした..どうすればそれらに到達し、それらからデータを設定および取得できますか?

4

3 に答える 3

2

他のコントロールと同じようにアクセスできます。

innerTextBox

Visual Studioデザイナは、ネストに関係なく、フォームに配置したコントロールごとにフィールドを生成します。

于 2012-07-24T16:42:12.073 に答える
1

Controlsこの目的のためにコレクションを使用してください。そのコレクション内のどのアイテムがTextBoxであるかを正確に知る必要があります。グループボックスにテキストボックスが3つしかない場合は、次を使用できます。

groupBox.Controls[0], groupBox.Controls[1], groupBox.Controls[2]

アイテムにアクセスするか、それぞれの名前を使用します。

于 2012-07-24T16:41:06.250 に答える
0

何らかの理由で innerTextBox に直接アクセスできない場合は、いつでも探しに行くことができます。

        TextBox myTextBox = null;

        Control[] controls = TextInfoGroupBox.Controls.Find("InnerTextBoxName", true);
        foreach (Control c in controls)
        {
            if (c is TextBox)
            {
                myTextBox = c as TextBox;
                break;
            }
        }

this の最後で、myTextBox が null の場合、(明らかに) 見つかりませんでした。複数のエントリが存在するような構造にしないでください。

かわいい拡張メソッドを作成することもできます。

public static Control FindControl(this Control parent, string name)
{
    if (parent == null || string.IsNullOrEmpty(name))
    {
        return null;
    }

    Control[] controls = parent.Controls.Find(name, true);
    if (controls.Length > 0)
    {
        return controls[0];
    }
    else
    {
        return null;
    }
}

public static T FindControl<T>(this Control parent, string name) where T : class
{
    if (parent == null || string.IsNullOrEmpty(name))
    {
        return null;
    }

    Control[] controls = parent.Controls.Find(name, true);
    foreach (Control c in controls)
    {
        if (c is T)
        {
            return c as T;
        }
    }

    return null;
}

そして、あなたは単にそれらを次のように呼び出すことができます

        Control c = TextInfoGroupBox.FindControl("MyTextBox");
        TextBox tb = TextInfoGroupBox.FindControl<TextBox>("MytextBox");
于 2012-07-24T16:45:10.357 に答える