2016-11-23 126 views
2

我尋找與此有關的東西,但找不到任何東西。使用索引C的循環變量#

有沒有辦法使用附加到變量的索引?

我至今是:

string tagName1 = tagNameBoxAMT1.Text; 
string tagName2 = tagNameBoxAMT2.Text; 
string tagName3 = tagNameBoxAMT3.Text; 
string tagName4 = tagNameBoxAMT4.Text; 
string tagName5 = tagNameBoxAMT5.Text; 
string tagName6 = tagNameBoxAMT6.Text; 

什麼,我想有是:

for(int i = 0; i < 6; i++) 
{ 
    string tagNamei = tagNameBoxAMTi.Text; 
} 

這可能嗎?

+0

您應該將變量添加到列表(數組,列表,集合)中,然後在'loop'中訪問列表中的每個位置。 – Tom

回答

3

管理等控件的列表:

var tagNames = new List<YourControl>() { 
    tagNameBoxAMT1, tagNameBoxAMT2, tagNameBoxAMT3, tagNameBoxAMT4, tagNameBoxAMT5, tagNameBoxAMT6 
}; 

,然後就可以適當地使用它:

for(int i = 0; i < 6; i++) 
{ 
    string tagNamei = tagNames[i].Text; 
} 

如果tagNameBoxAMT1和其他人字段/屬性,你可以使用反射做它自動,但它不是建議。

如果你想一起去思考的方法,這裏是示例代碼:

class SomeWindow 
{ 
    private SomeControl tagNameBoxAMT1; 
    private SomeControl tagNameBoxAMT2; 
    private SomeControl tagNameBoxAMT3; 

    public SomeWindow() 
    { 
     tagNameBoxAMT1 = new SomeControl() { Text = "Text1" }; 
     tagNameBoxAMT2 = new SomeControl() { Text = "Text2" }; 
     tagNameBoxAMT3 = new SomeControl() { Text = "Text3" }; 
    } 

    public void GiveMeWithReflection() 
    { 
     var thisType = typeof(SomeWindow); 
     var controlType = typeof(SomeControl); 

     var textProperty = controlType.GetProperty("Text"); 

     var props = thisType.GetFields(System.Reflection.BindingFlags.Instance | 
             System.Reflection.BindingFlags.NonPublic) 
          .Where(fi => fi.Name.StartsWith("tagNameBoxAMT")); 
     foreach (var prop in props) 
     { 
      var control = prop.GetValue(this); 
      var tagName = textProperty.GetValue(control); 
     } 
    } 
} 
+0

'tagNamei'也必須是數組的元素... – ChrisF

+0

完美,謝謝。認爲會有不同的方式,如使用CodeDom或類似的東西。這絕對夠好。 – NM24

+0

@ NateM24我剛剛更新了可能的反射方法。 –

0

確保,要做到這一點的TextBoxes到直接的形式,不是容器內 :)

private void button1_Click(object sender, EventArgs e) { 

string[] array = this.Controls.OfType <TextBox>().Select(r => r.Text).ToArray(); 

for (int i = 0; i < 6; i++) { 
    Console.WriteLine(array[i]); //This is used to dispaly array values 
} 

} 

你也可以試試這個,使用一個簡單的循環foreach像:

List<string> list = new List<string>(); 
    foreach (Control c in this.Controls) 
     { 
      if (c is TextBox) 
      list.Add((c as TextBox).Text); 

     }