Forum: PC-Programmierung c# TextBoxen in Schleife durchlaufen lassen


von n00b (Gast)


Lesenswert?

hallo,
ich programmiere mit VS2008 C#.
nun habe ich sehr viele Textboxen welche mir Werte Anzeigen.
Damit ich nun nicht jede TextBox im syntax extra aufrufen muss, suche 
ich nach einer Möglichkeit den Text in den Boxen in einer Schleife zu 
aktualisieren, geht sowas?

Momentan habe ich es so:
1
TextBox1.Text == Wert[n++]
2
TextBox2.Text == Wert[n++]
3
TextBox3.Text == Wert[n++]
4
TextBox4.Text == Wert[n++]
5
TextBox5.Text == Wert[n++]

Machen würde ich es gerne "irgendwie" so:
1
for (n=0; n<30; n++){
2
   TextBox(*).Text == Wert[n];
3
}
wobei das (*) ja dann irgendwie durch einen Zähler ersetzt werden muss, 
nun weiß ich eben nicht ob und wie das Möglich ist!?

geht das?

von csharpler (Gast)


Lesenswert?

Erstelle ein Textbox-Array und laufe dann das Array mit der foreach 
Schleife.

von Klaus (Gast)


Lesenswert?

Hallo,

Vorweg ich finde die lösung mit dem Array auch schöner.

Aber das hier könnte im übertragenen Sinne bei dir auch funktionieren.
1
for (int i = 1; i < 5; i++)
2
{
3
   Control[] found = this.Controls.Find("textBox"+i.ToString(), true);
4
5
   ((TextBox)found[0]).Text = i.ToString();
6
}

Gruß Klaus

von n00b (Gast)


Lesenswert?

Ich wußte nicht dass es Textboxen auch als arrays gibt!

hat problemlos geklappt!
Danke!

von csharpler (Gast)


Lesenswert?

Du kannst aus allen Objekten Arrays erstellen.

von fz (Gast)


Lesenswert?

Hallo

n00b schrieb:
> Momentan habe ich es so:TextBox1.Text == Wert[n++]
> TextBox2.Text == Wert[n++]
> TextBox3.Text == Wert[n++]
> TextBox4.Text == Wert[n++]
> TextBox5.Text == Wert[n++]

== ist keine Zuweisung, sondern ein Vergleichsoperator

grüße

fz

von n00b (Gast)


Lesenswert?

ja sorry, ist nur ein fehler als ich das beispiel oben getippt habe, 
natürlich meinte ich eine Zuweisung mit nur einem '='.

von Sven H. (dsb_sven)


Lesenswert?

So könnte es gehen:

Ganz oben in deiner Klasse:
1
List<TextBox> tbList = new List<TextBox>();

Bei Form_Loading (oder so)
1
tbList.Add(textBox1);
2
tbList.Add(textBox2);
3
tbList.Add(textBox3);
4
tbList.Add(textBox4);
5
tbList.Add(textBox5);

Und in deiner Funktion dann:
1
foreach (TextBox tb in tbList)
2
{
3
    tb.Text = Wert[n++];
4
}

von jones (Gast)


Lesenswert?

die möglichkeit textbox[0].text = "" scheint es in c# wohl nicht zu 
geben, in vb6.0 ging das. schade das ms das nicht übernommen hat.
das ganze mit einem list-element zu lösen, ist im moment auch meine 
einzigste funktionierende methode. gerade bei datenbankabfragen, die 
nicht fest an eine textbox gebunden sind, ist das mit dem index eine 
schöne sache.

von Sven H. (dsb_sven)


Lesenswert?

najaaa

Du kannst auch nen array anlegen und das mit den Textboxen befüllen. Die 
Liste hat den großen Vorteil, dass sie sich beim Zugriff auf die Member 
verhält wie ein Array aber die Größe dynamisch verwaltet wird ;-)

von Daniel G. (daniel83)


Lesenswert?

>foreach (TextBox tb in tbList)
>{
>    tb.Text = Wert[n++];
>}

geht im Übrigen auch ohne zuweisung in eine Liste, aber noch ein bischen 
unschöner.
Wenn der Code vom Designer kommt, willst du bestimmt nicht alles nochmal 
in eine Liste packen. die sind auch schon in einer drin. Zumendest dann, 
wenn sie nicht in einer Groupbox o.ä. sind.
1
foreach (control c in this.Controls)// ich weiß nicht aus dem Kopf ob man direckt textbox verwenden kann
2
{
3
   if(c is TextBox) // hier wird auch gleich gecastet
4
   {
5
       c.Text=Wert[n++];
6
   }
7
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.