[VB.Net05] Objekte dynamisch ansprechen

Hallo,

ich habe folgendes Problem:

Ich möchte x Elemente der Textbox ansprechen, also zum Beispiel so:

Textbox1.Text = „abc“
Textbox2.Text = „abc“
Textbox3.Text = „abc“
Textbox4.Text = „abc“

TextboxX.Text = „abc“

Hat jemand ne Idee, wie ich das am besten Gestalten kann?

Vielen Dank,

[Team: Name entfernt]

Auch hallo.

Ich möchte x Elemente der Textbox ansprechen, also zum
Beispiel so:

Textbox1.Text = „abc“
Textbox2.Text = „abc“
Textbox3.Text = „abc“
Textbox4.Text = „abc“

TextboxX.Text = „abc“

(Achtung, nicht getestet):

for (int i=0;i

Openbook zu VB2005: http://www.galileocomputing.de/openbook/visual\_basic/

HTH
mfg M.L.

Hallo,

ich habe folgendes Problem:

Ich möchte x Elemente der Textbox ansprechen, also zum
Beispiel so:

Textbox1.Text = „abc“
Textbox2.Text = „abc“
Textbox3.Text = „abc“
Textbox4.Text = „abc“

TextboxX.Text = „abc“

Hat jemand ne Idee, wie ich das am besten Gestalten kann?

Hallo!
Der Vorschlag von M.L. funktioniert nur, wenn Du Deine Textboxen in einem entsprechenden Array gespeichert hast, was nach dem Codefragment nicht der Fall ist.
Könnte man zwar zusätzlich noch machen, ist aber überflüssig.
Alle Steuerelemente auf Deinem Dialog werden bereits beim Initialisieren des Dialogs in die Controls -Collection eingetragen und über diese Elemente kann man ganz leicht iterieren:

foreach (Control c in this.Controls)
{
 if (c is TextBox)
 {
 TextBox tb = c as TextBox;
 // wenn nicht alle TextBoxen betroffen sein sollen,
 // kann man hier noch weitere Kriterien abprüfen
 tb.Text = "abc";
 }
}

Gruß,
Martin

Alle Steuerelemente auf Deinem Dialog werden bereits beim
Initialisieren des Dialogs in die Controls -Collection
eingetragen

und ist es auch möglich Objekte während der Laufzeit zu erstellen oder von einem dummy zu clonen, nur mit anderem Namen und Koordinaten?

Vielen Dank!

MfG Phr34k

Klar. Schau’ Dir einfach mal an, was VS in der Methode InitializeComponent() so treibt. Letztlich siehst Du dort, wie die Elemente, die Du im Designer auf das Form gepackt hast, im Code erstellt und ihre Eigenschaften gesetzt werden.
Um bspw. eine neue TextBox zu bekommen, kannst Du z.B. schreiben:

TextBox tb = new TextBox();
tb.Text = "Ich bin neu!";
tb.Position = new Point(10,20);
tb.Size = new Size(200,20);
tb.BackColor = Color.Yellow;
this.Controls.Add(tb);

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

schreiben:

TextBox tb = new TextBox();
tb.Text = „Ich bin neu!“;
tb.Position = new Point(10,20);
tb.Size = new Size(200,20);
tb.BackColor = Color.Yellow;
this.Controls.Add(tb);

Gruß,
Martin

erstmal Danke!

Wie ich ein neues objekt initialisiere hab ich auch schon geschafft. Jetzt ist eben das Problem der dynamisierung noch da… Ich weiß zu Programmstart noch nicht wie viele Textboxen ich eigentlich brauche…

ich müsste jetzt also rein _theoretisch_ folgenden Code durchführen:

FOR i = 0 To x
 TextBox (tb & cstr(i)) = new TextBox()
 ...
 this.Controls.Add(tb & i)
NEXT

Neinneinneinnein!
Du wirfst Namen von Referenzen und konkrete Objekte durcheinander!
Wenn Du lustig bist, kannst Du natürlich auch sowas machen (ich hoffe, mein VB ist noch halbwegs übersetzbar :smile:):

for (i as integer = 0 to x)
dim tb as TextBox
set tb=new TextBox()
' weitere Einstellungen der TextBox vornehmen
Me.Controls.Add(tb)
next

Auf diese Weise hantierst Du immer nur mit ein und derselben Referenz auf die jeweils frisch erzeugte TextBox.
Wenn Du dann auf eine bestimmte TextBox zugreifen willst, dann kannst Du das z.B. mit Controls(i) machen. Musst nur noch von Control auf TextBox casten (und beachten, dass in der Controls-Collection evtl. nicht NUR Textboxen enthalten sind, aber das hängt vom konkreten Fall ab).

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]