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

您可以使用 LINQTextBox从当前窗体中获取类型控件的所有名称。以下查询将返回一个包含所有名称的字符串数组。

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

如果您可以将 .NET 4.0 与 LINQ 一起使用,则可以使用以下代码

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 回答