2012-11-27 14 views
2

我想知道如何使用C#獲取表單中所有文本框的名稱?使用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); 
    } 

回答

7

您可以使用LINQ從目前的形式獲得TextBox類型的控件的所有名稱。以下查詢將返回包含所有名稱的字符串數組。

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

請記住,包括using System.Linq;

+0

謝謝,我會試試這個.. :) – GrayFullBuster

+0

嘿,爲什麼它在消息框上是空白的? :) – GrayFullBuster

+0

更新我的代碼:) – GrayFullBuster

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); 

這是由哈比卜提供的是一個更好一點的方法; )

+2

.Net 4.0和ArrayList?它更好,如果你可以使用類型安全的通用列表 – Habib

+0

如果你可以使用通用列表,它更好的就是這樣。 – Verni

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; 

      } 
相關問題