2013-12-16 66 views
0

C# - 2.0計數控件的數量 - 具有某些名稱的C#?

我試圖找出如何做的某些名稱對照名單上的一個循環: 「txtTesting [I]」

txtTesting1 
txtTesting2 
txtTesting3 ... 
txtTesting13 

隨着代碼我總共有13個。但隨着時間的推移,這可能會改變。所以我正在尋找從其中有數據的文本框中獲取數據。我似乎無法找出一種方法來進行控制計數。我曾經嘗試這樣做...

for (int i = 1; i < 13; i++) 
{ 
    if (txtTesting[i].text != "") 
    { 
     // 
    } 
} 

我也收到此錯誤... Error 51 The name 'txtTesting' does not exist in the current context

除非我在這裏失去了一些東西。

System.Web.UI.WebControls.TextBox

+2

沒有。但是你可以將所有的控件放入一個集合中並循環。 – Will

+0

嗯。不知道我該怎麼做。 – user2800287

+0

這是一個Windows或ASP.NET應用程序嗎? –

回答

0

txtTesting看起來像陣列。它有一個Length屬性嗎?

for (int i = 1; i < txtTesting.Length; i++) 

如果它是一個類型List<T>比也許它有一個Count財產

for (int i = 1; i < txtTesting.Count; i++) 

如果你不已經有一個數組,你可以在你認爲形態的構造函數初始化一個

List<WhateverTypeTxtTestingIs> txtTesting = new List<WhateverTypeTxtTestingIs>(); 

txtTesting.Add(txtTesting1); 
txtTesting.Add(txtTesting2); 
... 
+1

Nah。我想他是說他有「txtTesting1」,「txtTesting2」,每一個文本框。 – Will

+0

這是正確的將 – user2800287

0

您可以使用foreach在你的陣列:

foreach (TextBox txt in txtTesting) 
    { 
     if (txt.text != "") 
     { 
      // 
     } 
    } 

或者,數組有,您可以使用length屬性。

for (int i = 1; i < txtTesting.length; i++) 
    { 
     if (txtTesting[i].text != "") 
     { 
      // 
     } 
    } 

如果沒有控件數組,你可能想在this answer通過所有表格上的控件來看看循環。除了一般的字典是不是在C#2,所以它看起來更像是這樣的:

private void button1_Click(object sender, EventArgs e) 
{ 
    ArrayList txtTesting = ArrayList(); 
    LoopControls(controls, this.Controls); 
    foreach (TextBox txt in txtTesting) 
    { 
     if (txt.text != "") 
     { 
      // 
     } 
    } 
} 

private void LoopControls(ArrayList list, Control.ControlCollection controls) 
{ 
    foreach (Control control in controls) 
    { 
     if (control is TextBox && control.Name.StartsWith("txtTesting")) 
      list.Add(control); 
     if (control.Controls.Count > 0) 
      LoopControls(list, control.Controls); 
    } 
} 
0

有效的方法是將控件添加到一個數組和環比的是,但你也可以通過控制環和檢查控制的Name

foreach(Control c in this.Controls) // <-- "this" may not be appropriate - you just need to reference the containing control 
{ 
    if(c.Name.StartsWith("txtTesting") 
    { 
     /// 
    } 
} 
+0

'System.Web.UI.Control'不包含'名稱'的定義 – user2800287

+0

我假定你沒有指定windows。使用'ID'而不是'Name' –

+0

異常詳細信息:System.NullReferenceException:未將對象引用設置爲對象的實例。 – user2800287

0

在構造函數中,InitializeComponent調用後,東東的文本框收藏。

// class-scoped variable 
private List<Textbox> _boxen = new List<TextBox>(); 

public MyFormDerp() 
{ 
    InitializeComponent(); 
    _boxen.Add(txtTesting1); 
    // etc 
    _boxen.Add(txtTesting13); 
} 

,後來就......

foreach(TextBox box in _boxen) 
    if (box.text != "") 
    { 
     // 
    } 

而且,你的設計應該讓你感到瘙癢。

+0

也是2.0?天啊。 – Will

1

假設這是一個System.Windows.Forms應用程序,你應該能夠去通過所有控件的形式,然後選擇是文本框,如下所示的:

 foreach (System.Windows.Forms.Control control in this.Controls) 
     { 
      if (control is System.Windows.Forms.TextBox) 
      { 
       if (((System.Windows.Forms.TextBox)control).Text != "") 
       { 
        // Do something 
       } 
      } 
     } 

對於一個asp.net應用程序本就非常相似:

 foreach (System.Web.UI.Control control in this.Controls) 
     { 
      if (control is System.Web.UI.WebControls.TextBox) 
      { 
       if ((System.Web.UI.WebControls.TextBox)control).Text != "") 
       { 
        // Do something 
       } 
      } 
     } 
相關問題