2012-04-10 23 views
0

私は6行に6つのテキストボックスを持っています。行1、ボックス1はL1N1、行1、ボックス2はL1N2などと呼ばれます。文字列を使用してこれらのテキストボックスに値を動的に割り当てる必要があります。これはCで行うことができますか?例えば。C#文字列を使用してテキストボックスを識別/使用するには?

private void Generate_Click(object sender, EventArgs e) 
    { 
     int[,] numbers = new int[6, 6]; 
     int lin = 0; 
     while (lin < 6) 
     { 
      lin++; 
      int num = 0; 
      while (num < 6) 
      { 
       num++; 
       Random random = new Random(); 
       int randomNum = random.Next(1, 45); 
       "L" + lin + "N" + num /* <--here is my string (L1N1) i want to 
              set my textbox(L1N1).text to a value 
              randomNum!*/ 
+9

これらのテキストボックスがコレクションにない理由はありますか?コレクションに自然インデックスを付けるのではなく、なぜ*文字列*でコントロールを識別したいのですか? –

+4

タイトなループでランダムインスタンスを再作成していますが、結果はあまりランダムではありません。 –

+0

ありがとうHenk、私は実際のコードでThread.Sleepを持っています... – Nixer

答えて

-1

私はJon Skeetの感想をエコーし​​ます。

var textboxes = new TextBox[6][]; 
textboxes[0] = new TextBox[]{txtL1N1, txtL1N2, txtL1N3, txtL1N4, txtL1N5, txtL1N6}; 
//create the rest of the "lines" of TextBoxes similarly. 

//now you can reference the TextBox at Line X, number Y like this: 
textboxes[X-1][Y-1].Text = randomNum.ToString(); 

:あなたは、いくつかの行/列システムによってコントロールを見つけることができるようにしたい場合は、そうするための最も簡単な方法は、彼らが同じようにインデックスを作成することができますコレクションにコントロール自体を置くことですさて、これらのテキストボックスに文字列値でアクセスしたいのであれば、ほとんどのコントロールの汎用プロパティであるTagプロパティを使用します。あなたはまた、いくつかのシステムに応じてすべてのテキストボックスに名前を付けることができます。次に、少しのLinqがあなたに必要なテキストボックスを手に入れることができます:

this.Controls.OfType<TextBox>() 
    .Single(t=>t.Tag.ToString() == "L1N1").Text = randomNum.ToString(); 

しかしこれは非常に遅いことを理解しています。フォームに必要なたびにフォームにあるすべてのコントロールの完全なコレクションを検索します。インデックス作成ははるかに高速になります。

+0

なぜdownvote? – KeithS

2

確かに、ウェブページはあなたのための素敵にFindControlを持っています

TextBox tx = FindControl("L" + lin + "N" + num) as TextBox; 
0
List<TextBox> listOfTextBoxes = new List<TextBox>(); 
...initialization of list.... 
foreach(TextBox tb in listOfTextBoxes) 
{ 
Random r = new Random(); 
tb.Text = r.Next(1,45).ToString(); 
} 
0

あなたがにFindControlのAPIを使用しての.textプロパティを設定することができませんか?

0
private void formMain_Load(object sender, EventArgs e) 
{ 
    this.Controls.Find("Your Concatenated ID of control ex: L1N2", true); 
} 

または

foreach(var cont in form.Controls) 
{ 
    if(cont is TextBox) dosmth; 
} 
0

それがWebフォームの場合:(ちょうどフォームのインデックスを見つける)

protected void Generate_Click(object sender, EventArgs e) 
    { 
     foreach(Control item in Page.Controls[3].Controls) 
     { 
      if(item.GetType().ToString().ToLower().Contains("textbox")) 
      { 
       Random rnd = new Random(); 
       TextBox txt = (TextBox)item; 
       System.Threading.Thread.Sleep(20); 
       txt.Text = rnd.Next(1, 45).ToString(); 
      } 
     } 
    } 
0

Form.Controls FindByName方法を持っているので、あなたコントロール名を作成して使用することができます。しかし、それは輝きではありません。

個人的には、TextBox [6,6]からプログラムでコントロールを作成するか、またはForm.Controlsから[6,6]への参照を1つとしてオフにプッシュ にロードします。

アレイを取得したら、そのアレイの用途をすべて見つけることができます。

関連する問題