2017-01-19 3 views
-1

私はtextBox1からtextBox26までの26個のテキストボックスとボタンを持つ基本的なプログラムを持っています。このボタンは現在、各TextBoxに1,xまたは2という値を与えています。また、配列または複数のif/elseステートメントを使わずに、TextBoxの値と最後の値より大きい13の値を持つ名前を持つTextBoxの値を比較したい。たとえば、textBox1textBox14を比較したいと思います。配列のないTextBox値の比較。 C#

Random r = new Random(); 
int ran; 
int x; 
int y; 

private void button1_Click(object sender, EventArgs e) 
{ 
    foreach (Control b in this.Controls.OfType<TextBox>()) 
    { 
     ran = r.Next(1, 4); 
     if (ran == 1) 
     { 
      b.Text = "1"; 
     } 
     else if (ran == 2) 
     { 
      b.Text = "x"; 
     } 
     else if (ran == 3) 
     { 
      b.Text = "2"; 
     } 

     x = b.TabIndex; 
     y = x + 13; 

     var box = (TextBox)this.Controls.Find("textBox" + x.ToString()); 
     var box1 = (TextBox)this.Controls.Find("textBox" + y.ToString()); 

     box.Text = box1.Text; 
    } 
} 

これは、エラーメッセージが表示できます::私は現在、このコード持って

必要な仮パラメータに対応して与えられた引数はありませんがControl.ControlCollection.Find」の検索子供(ライン上の文字列、ブール値)」 :

var box = (TextBox)this.Controls.Find("textBox" + x.ToString()); 
var box1 = (TextBox)this.Controls.Find("textBox" + y.ToString()); 
+1

ここで配列を使用しない理由は何ですか?それはリファクタリングが良くなるのでより良いでしょう(あなたがテキストボックスをより意味のある名前にすることを決めたと想像してください)。 – juharr

+0

これは[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のようです。これらの比較の最終目標は何ですか? –

答えて

2

あなたがargumenのために価値を提供していないので、あなたの特定のエラーがありますトン(...エラー状態など):

var box = (TextBox)this.Controls.Find("textBox" + x.ToString(), false); 

私の例のように使用false、または必要に応じて、true。検索しているコントロールの中に入れ子になっているコントロール(つまり子供)を検索に含めますか?

+0

私が実行しているプログラムのテキストボックスの値を比較するのに役立つなら、検索対象のコントロールの中にネストされているコントロールを含めることができます。私の考えは、次のようにそれらを比較することです: if(box.Text == box1.Text) { box.BackColor = Color.Green; } else { box.BackColor = Color.Red; } – Oberruk