2017-09-28 4 views
1

私は私がここに持っているものよりもよりエレガントな解決策を探しています C#各TxtBoxに配列インデックスを割り当てますか? ;)(randomArray [0] .ToString -

{ 
    public partial class Form1 : Form 
    { 
     private int[] randomArray = new int[7]; 

     int Min = 1; 
     int Max = 60; 

     Random rand = new Random(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      genBtn.Focus(); 
     } 

     private void genBtn_Click(object sender, EventArgs e) 
     { 


     for (var i = 0; i < randomArray.Length; i++) 
      { 
       randomArray[i] = rand.Next(Min, Max); // Remember to assign random number 
      } 



      boxNum1.Text = randomArray[0].ToString(); 
      boxNum2.Text = randomArray[1].ToString(); 
      boxNum3.Text = randomArray[2].ToString(); 
      boxNum4.Text = randomArray[3].ToString(); 
      boxNum5.Text = randomArray[4].ToString(); 
      boxNum6.Text = randomArray[5].ToString(); 
      boxNum7.Text = randomArray[6].ToString(); 
     } 

     private void pictureBox1_Click(object sender, EventArgs e) 
     { 

     } 
    } 
} 

は私が嫌いboxNum1.Textそれは私がそれをやり遂げることができる唯一の方法です、私は考えていないより明白な解決策はありますか?

+0

あなたはフォームのすべての子をループすることはできませんでしたか? (そしておそらくテキストボックスにタグを付けます) –

答えて

0

randomArrayを削除し、直接Textプロパティを割り当て、配列にあなたの箱を置く:

private void genBtn_Click(object sender, EventArgs e) { 
    foreach (box in new[]{boxNum1, boxNum2, boxNum3, boxNum4, boxNum5, boxNum6, boxNum7}) { 
     box.Text = rand.Next(Min, Max).ToString(); 
    } 
} 

私はあなたがで配列を作成することができ、テキストボックスの配列

を作成する[と]思いました地方レベルではなくクラスレベルである:

private readonly TextBox[] allBoxes; 
public Form1() { 
    InitializeComponent(); 
    allBoxes = new TextBox[] { 
     boxNum1, boxNum2, boxNum3, boxNum4, boxNum5, boxNum6, boxNum7 
    }; 
} 
private void genBtn_Click(object sender, EventArgs e) { 
    foreach (box in allBoxes) { 
     box.Text = rand.Next(Min, Max).ToString(); 
    } 
} 
+0

@LiamVallance 'boxNum1' ...' boxNum7'は 'InitializeComponents'メソッドが実行されるまで初期化子が' InitializeComponents'の前に実行されるまで割り当てられません。 'boxNum ... 'の値はコンストラクタ内のタイミング*に依存するので、C#はそれを完全に禁止します。 – dasblinkenlight

+0

@LiamVallance 'Control'は' Object'のサブクラスで、 'TextBox'は' Control'のサブクラスなので、すべてを 'Object'として使うことができます。 – dasblinkenlight

関連する問題