0

重複の可能性:
C# 2010.NET でコントロール配列を作成するにはどうすればよいですか?

ウィンドウ フォームに 10 個のテキスト ボックスがあります。VB6 のように C# でソース コードを記述して、すべてのテキスト ボックスが同じ名前を持つインデックス値を持つすべてのテキスト ボックスにアクセスできますか?

4

4 に答える 4

4

VB6 スタイルのコントロール配列はサポートされていませんが、個別に宣言された配列またはリストに各コントロールを追加することで、これを簡単に実現できます。

private List<Textbox> txtSameName = new List<Textbox>();

コンストラクターで、InitializeComponent の後:

txtSameName.Add(txtOne);
txtSameName.Add(txtTwo);
txtSameName.Add(txtThree);
txtSameName.Add(txtFour);

次に、インデックスまたは foreach を介して反復できます。

for (int 1 = 0; i < txtSameName.Length; i++)
{
   txtSameName[i].Text = string.empty;
}

共通ハンドラを接続するには:

foreach (Textbox tb in txtSameName)
{
   tb.TextChanged += new EventHandler(txtSameName_TextChanged);
}

そして、次のような単一のハンドラー:

private void txtSameName_TextChanged(object sender, EventArgs e)
{
   Textbox tb = sender as Textbox;
   tb.BackColor = Colors.Yellow;
}
于 2012-09-10T18:23:40.327 に答える
0

Winformsでは名前は実際には無関係です。テキストボックスを配列に追加して、そのようにインデックスを付けることができます。

于 2012-09-10T18:18:10.827 に答える
0

VB6 のような「組み込み」の方法はありません。ただし、テキスト ボックスの名前txtBox0txtBox1、 などで、その数が 10 未満であると仮定すると...

この回答に示されている方法を使用する場合、次のように記述できます。

var myTextBoxes =
    this.FilterControls(c => c is TextBox)
        .Where(c => c.Name != null && c.Name.StartsWith("txtBox"))
        .OrderBy(c => c.Name)
        .ToArray();

これmyTextBoxesで配列が含まれているはずです。

于 2012-09-10T22:42:49.467 に答える
0

コントロールにのみアクセスする必要がある場合は、次のようなことができると思います。

public TextBox[] TextBoxesArray
{
    get
    {
        return Controls.OfType<TextBox>().Select(control => control).ToArray();
    }
}

TextBoxこれを拡張して、配列から es を追加/削除Controlsし、同時にコレクションを更新する方法がわかりません。

于 2012-09-10T18:36:24.377 に答える