TextBox dynamisch erzeugen


maggo85

Grünschnabel
#1
hallo,

ich möchte daten, die ich aus einer db auslese, in textboxen anzeigen - wenn ich die anzahl der datensätze weiß, ist das auch kein problem, das funktioniert einwandfrei.

nur leider variiert die anzahl der datensätze in diesem fall, daher muss ich in abhängigkeit der anzahl die gewünschte zahl an textfeldern dynamisch erzeugen lassen.

habe keine ahnung wie man ein control (textbox,label,...) dynamisch erzeugen kann :confused:

bitte helft mir, ist dringend!

mfg
maggo
 

MCoder

Premium-User
#2
Hallo,
einfach mit "new" anlegen und zu der betreffenden Form hinzufügen:
C#:
TextBox myTextBox = new TextBox();  // Erzeugen

myTextBox.Left = 10;                // Eigenschaften zuweisen
myTextBox.Top  = 10;
myTextBox.Width = 100;
// ...            

Controls.Add(myTextBox);            // Zur Form hinzufügen
Gruß
MCoder
 

maggo85

Grünschnabel
#3
alles klar, das funktioniert soweit, vielen dank!

das ganze kann ich dann in eine schleife verpacken, dann wird ja die richtige anzahl an textboxen erstellt - nur wie ist das dann mit dem namen der box? der muss ja auch verändert werden, oder?

mfg
maggo
 

MCoder

Premium-User
#4
Hallo,

also der gleiche Variablenname innerhalb der Schleife ist kein Problem; es wird trotzdem immer ein neues TextBox-Objekt erzeugt. Um die jeweilige TextBox allerdings später mal identifizieren zu können (etwa bei einem Event), solltest du die "Name"-Eigenschaft mit einem eindeutigen Text versehen:
C#:
for( int i = ...   )
{
    // ...

   myTextBox.Name = String.format("MYTEXTBOX{0}", i);

    // ...
}
Gruß
MCoder
 

maggo85

Grünschnabel
#5
herrlich, auch das funktioniert - jetzt habe ich genau das was ich wollte ;-)

nur noch eine frage: wie kann ich dann auf die einzelnen boxen zugreifen? heißen die dann zB mytextbox1? also wenn ich den text einer box in ein label schreiben will, kann ich das dann so machen?

Code:
Label1.Text = MyTextBox1.Text
vielen dank schonmal für deine schnellen antworten!

mfg
maggo
 

MCoder

Premium-User
#6
Hallo,

der bei "Name" vergebene Text dient als Key für die ControlCollection der Form. Du kannst daher folgendermaßen darauf zugreifen:
C#:
Controls["MYTEXTBOX1"].Text = "Hallo";

// oder

Label1.Text = Controls["MYTEXTBOX1"].Text;
Gruß
MCoder