2016-05-06 13 views
0

Ich versuche, Anzahl der TextBoxen nach Zahl in TextBox1 zu machen, und ich möchte jeden TextBox-Wert in meinem Programm verwenden. Ihr Name wird txtbx0, txtbx1 ... aber wenn ich in meinem Programm verwenden will, gibt es einen Fehler "Der Name 'txtbx1' existiert nicht im aktuellen Kontext". Wie kann ich sie in meinem Programm verwenden?Verwenden von dynamischen Textfeldern in C# -Programm

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]); 

     } 

    } 

Antwort

0

So wie du es jetzt haben, könnten die Textfelder, indem Sie Ihre Array txtbx[whateverNumber] zugegriffen werden. Um sie außerhalb der von Ihnen geposteten Methode zugänglich zu machen, müssen Sie Ihr txtbx Array zu einem Klassenmember anstelle einer Methode-Bereichsvariablen machen.

Etwas wie:

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. 
    } 
} 

Zugriff auf sie individuell nach Name ist nicht wirklich möglich, weil Sie Klasse Membervariablen für jeden von ihnen haben müsste, aber Sie wissen nicht vorne wie viele zu machen . Die Array-Methode, wie Sie es tun, ist viel besser. Sie können auf sie nur in anderen Methoden zugreifen, indem Sie txtbx[0] bis txtbx[numBoxes - 1] verwenden.

+0

Danke, ich habe gearbeitet: D –

Verwandte Themen