2016-11-23 13 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); 

     } 
関連する問題