2014-11-05 31 views
1

我有一個List對象,它會自動填充文本框的名稱。現在我想循環瀏覽所有這些文本框。 如何讓C#知道List中的字符串名實際上是帶有該字符串名的TextBox對象?如何使用在循環中創建並存儲在列表<string>中的變量名?

 List<string> txtOppsNames = new List<string>(); 
     for (int i = 1; i < numOpps; i++) 
     { 
      txtOppsNames.Add("txtOpp" + i); 
     } 
     foreach (var txtName in txtOppsNames) 
     { 
      if (txtName.Text != "") 
      { 
       // do stuff 
      } 
     } 

當前的代碼讀取txtName作爲字符串。我希望它讀取爲一個文本框。

編輯 - 下面的代碼包含我的解決方案。

 List<string> txtOppsNames = new List<string>(); 
     for (int i = 1; i < numOpps; i++) 
     { 
      txtOppsNames.Add("txtOpp" + i); 
     } 
     foreach (var txtName in txtOppsNames) 
     { 
      TextBox textBox = this.Controls.Find(txtName, true).FirstOrDefault() as TextBox; 
      if (textBox.Text != "") 
      { 
       MessageBox.Show("Thanks Amir Popovich"); 
      } 

     } 
+0

你不能那樣做,你在哪個環境工作? ASP.NET/Windows窗體等。 – Nunners 2014-11-05 07:33:46

+0

'txtOppsNames'是一個'List '。你爲什麼認爲你的'txtName'可以是'TextBox'? – 2014-11-05 07:35:05

+0

您可以考慮動態創建文本框(不是通過設計器),而是將它們添加到「列表」中。 – 2014-11-05 07:37:31

回答

1

使用Control.ControlCollection.Find

string textBoxName = "txtOpp1"; 
TextBox textBox = this.Controls.Find(textBoxName, true).FirstOrDefault() as TextBox; 

你的情況:

List<string> txtOppsNames = new List<string>(); 
for (int i = 1; i < numOpps; i++) 
{ 
    txtOppsNames.Add("txtOpp" + i); 
} 
foreach (var txtName in txtOppsNames) 
{ 
    var control = this.Controls.Find(txtName, true).FirstOrDefault(); 
    if(control != null && control is TextBox) 
    { 
     TextBox textBox = control as TextBox; 
     if(textBox.Text != string.Empty) 
     { 
      //logic 
     } 
    } 
} 
+1

我喜歡@ Royi的回答,因爲它有測試以確保它是一個文本框,但我也喜歡你的'textBox.Text!= string.Empty.' – jbutler483 2014-11-05 08:57:05

1

試試這個:

List<string> txtOppsNames = new List<string>(); 
     for (int i = 1; i < numOpps; i++) 
     { 
      txtOppsNames.Add("txtOpp" + i); 
     } 
     foreach (var txtName in txtOppsNames) 
     { 
      var cntrl= FindControl(txtName); 
      if (cntrl!=null && cntrl is TextBox) 
       // do something with 
       ((TextBox)cntrl) 
     } 
0

假設這是WinForm的,似乎有沒有漂亮的方式去做吧。您可以使用Loop through Textboxes

一旦你有文本框集合,檢查您的字符串的名稱。

相關問題