2016-05-06 7 views
0

TextBox1の番号に従ってTextBoxを作成しようとしていて、プログラムの各TextBoxの値を使用したいとします。彼らの名前becames txtbx0、txtbx1 ...私のプログラムで使用したいとき、それはエラー "現在のコンテキストでは 'txtbx1'が存在しません"という名前を与えます。プログラムでどのように使用できますか?C#プログラムでダイナミックテキストボックスを使用する

public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     int y = Convert.ToInt32(textBox1.Text); 
     TextBox[] txtbx = new TextBox[y]; 
     for (int i = 0; i < y; i++) 
     { 
      txtbx[i]= new TextBox(); 
      txtbx[i].Location = new Point(20, i * 50); 
      txtbx[i].Size = new Size(100,50); 
      txtbx[i].Name = "txtbx"+i.ToString(); 
      txtbx[i].Text = txtbx[i].Name; 
      flowLayoutPanel1.Controls.Add(txtbx[i]); 

     } 

    } 

答えて

0

あなたが今それを持っているようにして、テキストボックスを使用しているアレイtxtbx[whateverNumber]を使用してアクセスすることができます。投稿したメソッドの外部でそれらをアクセスできるようにするには、メソッドスコープの変数の代わりにtxtbx配列をクラスメンバーにする必要があります。以下のような

何か:あなたがそれらのそれぞれのクラスのメンバ変数を持つ必要があるだろうが、あなたが作るためにどのように多くのアップフロントわからないので、名前で個別にアクセスする

class Form1 : Form 
{ 
    TextBox[] txtbx; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     int y = Convert.ToInt32(textBox1.Text); 
     txtbx = new TextBox[y]; // Now this references the class member 
     for (int i = 0; i < y; i++) 
     ... etc. 
    } 
} 

が本当に現実的ではありません。あなたがやっているような配列メソッドははるかに優れています。あなたはtxtbx[0]からtxtbx[numBoxes - 1]を使って他の方法でそれらにアクセスできます。

+0

ありがとう、私は働いた:D –

関連する問題