3

C#を使用してフォーム内のすべてのテキストボックス名を取得するにはどうすればよいですか?

動的にテキストボックスを生成するための私のコードは次のとおりです。

private void Form1_Load(object sender, EventArgs e)
    {
        for (int i = 1; i <= 5; i++)
        {
            TextBox txtbox = new TextBox();
            txtbox.Name = "txtbox" + i;
            flowLayoutPanel1.Controls.Add(txtbox);

            Label lbl = new Label();
            lbl.Name = "lbl" + i;
            lbl.Text = lbl.Name;
            flowLayoutPanel2.Controls.Add(lbl);
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string[] textBoxNamesArray = this.Controls.OfType<TextBox>()
                                      .Select(r => r.Name)
                                      .ToArray();

        var textboxes = string.Join(",", textBoxNamesArray);

        MessageBox.Show(textboxes);
    }
4

3 に答える 3

8

LINQ を使用してTextBox、現在のフォームからタイプのコントロールのすべての名前を取得できます。次のクエリは、すべての名前を含む文字列の配列を返します。

string[] textBoxNamesArray = flowLayoutPanel1.Controls.OfType<TextBox>()
                                          .Select(r => r.Name)
                                          .ToArray();

含めることを忘れないでくださいusing System.Linq;

于 2012-11-27T07:00:48.457 に答える
2

this.controlsを使用しました。変換または追加できます。

for ( int x = 0; x < i; x++ )
            {
                TextBox txtbox= ( TextBox )this.Controls["txtbox" + ( x + 1 ).ToString()];
               double commissions = Convert.ToDouble( txtbox.Text ) / 100;

            }
于 2012-11-27T07:10:27.613 に答える
1

LINQで.NET4.0を使用できる場合は、次のコードを使用できます

ArrayList list = new ArrayList(control.Controls);
var names = list.ToArray()
            .Where(src => src is TextBox)
            .Select(src => (src as TextBox).Name);

Habibが提供する方法は少し優れています;)

于 2012-11-27T07:05:13.437 に答える