Mit einer Schleife auf Textboxen zugreifen

Dr_Planlos

Grünschnabel
Hallo Leute,

ich schreibe gerade mit C# ein Programm, wo wiele Textboxen in einem Formular sind.
Um genau zu sein sind es 19 Zeilen mit einer Textbox und 3 CheckBoxen.

Momentan benutze ich zu schreiben und lesen 19 x

Code:
this.tb_zykfkt1.Text = Daten[0][0];
this.cb_Besch1.Checked = bool.Parse(Daten[0][1]);
this.cb_Dekan1.Checked = bool.Parse(Daten[0][2]);
this.cb_Beschsp1.Checked = bool.Parse(Daten[0][3]);

Ich wollte fragen, ob es da nicht eine elegantere Lösung gibt :)
Ich habe schon ge :google: d , weiss aber nicht genau, nach welchen Stichwörtern ich suchen muss, daher bin ich für jeden Tip Dankbar

Danke schonmal im Vorraus :p
 
Hallo

Angenommen dein Formular heisst frmTest

Dann hat frmTest eine Controls auflistung. Da stehen alle Steuerelemente drin, die auf dem Formular sind!
Problem: Wenn auch Buttons auf dem Formular sind, stehen die natürlich auch in der Auflistung
Lösung: Entweder abprüfen, ob das aktuelle Element (in deiner Schleife) auch wirklich eine Textbox ist. Oder: Alle Textboxen ein eineigenes Panel-Steuerelement packen.
Der Anwender sieht das nicht und du kannst dann über die Controls Auflistung vom Panel(ich nenns mal hier pnlTextBoxen) iterieren. Also:

foreach TextBox mytb in frmTest.pnlTextBoxen.Controls
{
mytb.Text = 'DatenEintrag'

}

Hier musst du dann nur noch ggf. eine Zählervariable einbauen um auch deine Daten hochzuzählen.
 
Hab nochmal drüber nachgedacht.

Am elegantesten (und am objektorientiertesten) wäre wohl folgendes:

Bau Dir ein eigenes Steuerelement, welches deine Textbox und 3 Checkboxen auf einem Panel enthält.

Schreibe einen zusätzlichen Konstruktor dafür, dem du 4 Werte mitgeben kannst. Einen String, und 3 Bool Werte.

In Deinem eigentlichen Programm iteriere über die Daten und füge für jeden Datensatz EINES deiner neuen Steuerelemente zu einem Panel auf dem Formular hinzu und gib direkt im Konstruktor die Werte mit. Wenn Du nun noch für jedes Element direkt die Dock Eigenschaft auf Top setzt, werden die Elemente untereinander hinzugefügt.

Also:

Datenlese/Füllschleife:

foreach Datensatz in Datenliste
{
frmMeineForm.pnlDatenpanel.Controls.Add ( new MeinSteuerelement(Datensatz[0],bool.Parse(Daten[1]),bool.Parse(Daten[2]),bool.Parse(Daten[3]) ) )
}

Da Du mit foreach über die Daten gehst brauchst Du hier auch nur noch auf das 1-Dimensionale Array zu verweisen.


ggf. musst Du noch für jedes Element die BringToFront() Methode ausführen, weil das darüber entscheidet, ob die neuen oder die alten Elemente oben in der Liste stehen.
Ich weiß grad auswendig nur nicht, wie es standardmässig ist.

Gruss
Christian
 
Zurück