2011-04-14 59 views
0

我發現了一些代碼,可以循環顯示錶單上的每個文本框,然後允許我將其與某些條件進行比較。但那不是我想要做的。我知道我想循環的4個文本框,我只是不知道如何引用這4個文本框,而沒有循環遍歷表單上的每個文本框。從我的程序角度來看,這不是一個真正的問題,因爲我一共只有大約20個文本框。但那不是重點,我想知道如何正確地做到這一點。如何循環訪問特定文本框

基本上我有4個文本框:MyTxtBox1,MyTxtBox2,MyTxtBox3和MyTxtBox4。只有這些我想循環。

線沿線的東西:

  for (int i = 1; i < 5; i++) 
      { 
    string myName = "MyTxtBox" + i.ToString(); 
      if (MyFunction(this.myName)) 
      { 
       return; 
      } 
      } 

但this.myName不工作,這就是可能是因爲它只是一個字符串。我不知道我在將文本框名稱構建爲字符串後如何引用窗體上的文本框。

任何人都可以看到我想要做什麼,它甚至有可能嗎?或者我將不得不循環遍歷表單上的每個文本框,然後對其.Name屬性進行測試。

感謝

+0

你想達到什麼目的?當你已經知道這個名字,爲什麼你想循環? – sajoshi 2011-04-14 08:47:13

+0

你的函數'MyFunction(this.myName))'是一個bool函數嗎?它返回的是什麼,如果你發佈你的函數會更好! – 2011-04-14 08:47:16

+0

如果總是相同4,爲什麼不明確引用它們?另外,請分享'MyFunction'。 – 2011-04-14 08:47:51

回答

1

想想沿此線的東西:

{ 
    List<Textbox> list = new List<Textbox>(); 
    list.Add(myBox1); 
    list.Add(myBox1); 
    .. 

    foreach (Textbox box in list) 
     if (MyFuction(box)) 
      return; 
} 
+0

我有這個建議給我,它會適用於我的少量項目。但是,如果我有20或更多,這將變得越來越麻煩。我相信肯定有一種方法可以循環遍歷。感謝您的建議 – FrustratedNewbie 2011-04-14 08:59:47

+0

我不確定您的意思 - 然後,如果您只添加了四個要循環訪問的列表,則其他所有其他人都不會在您的表單中循環。無論你有10個,20個還是100個。 – Jaapjan 2011-04-14 09:04:24

+0

對不起,我的意思是你的解決方案對我當前的問題非常好,因爲你是正確的,我只有4個文本框。但在將來我可能想要遍歷20個或更多的文本框。 – FrustratedNewbie 2011-04-14 10:02:23

0

嘗試將它們放置在一個組框起來,這樣你可以訪問該組框中的所有控件。

3

一個文本框是一個控件。創建的ControlCollection,然後使用ControlCollection.Find()方法...像

Control.ControlCollection collection = this.Controls; 
Control newControl=collection.Find(<textbox name here>,true); 

並運行它通所需的循環。

+0

+1:這是文本框的最佳想法,無論如何都將是集合的成員(或至少在控制層次結構中的某處)。 – Nick 2011-04-14 08:51:40

+0

+1:這是正確的。我發佈了另一個更接近OP代碼的類似答案,並且還包括一個(TextBox)類型轉換,這是實際引用各個文本框的屬性所必需的。 – 2011-04-14 09:10:40

+0

謝謝Khemka,這看起來像是我之後的事情。但由於某些原因,我無法使Control.ControlCollection工作。我正在使用Visual Studio 2010.我得到以下錯誤:「錯誤\t 1類型'System.Windows.Controls.Control'中不存在類型名'ControlCollection'」。當我輸入Control時。智能感知不提供ControlCollection作爲選項。如果我添加「使用System.Windows.Forms」我得到一個錯誤「'控制'是'System.Windows.Controls.Control'和'System.Windows.Forms.Control'之間的歧義引用」 – FrustratedNewbie 2011-04-18 07:24:18

0

this.Controls [「yourtextboxname」+ Convert.ToString(i + 1)]。Text;