• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

C# Button ansprechen über Namen aus String

Dj Boris

Mitglied
Hallo

Dies hier ist vielleicht eine ganz einfache Frage, die mir aber zu schaffen macht:

Wie kann ich einen Button z.B. so ansprechen:

Code:
string s = "btn_haus";
int i = //irgend ein Wert

[s + i].Text = "Welt"; // [s + i] = Buttonname
Also aus den beiden Variablen ergibt sich der Name des Buttons
In Action Script 3 gibt es nach meinen Recherchen so etwas: getChildByName(s + i).Text = "Affe";

Ich hab schon Tagelang nach einer Lösung gesucht aber nichts gefunden

Danke
 
Selbst falls das irgendwie machbar sein sollte (ich bezweifle es, aber man weiß ja nie...), ist es prinzipiell nicht korrekt, den Namen des Bezeichners dynamisch zusammenzubauen. Ich kann kein C#, aber besser wäre es so (per Suchmaschine zusammengebauter Pseudocode):

Code:
Button[] buttons = null; // Array von Buttons
int i = 0;

// 10 Buttons erstellen und in Array speichern
for (i = 0; i < 10; i++) {
    Button b = new Button();
    b.Size = new Size (50, 20);
    b.Text = "Button #" + i;

    // Button zu Array buttons hinzufügen (?)
    buttons.push(new Button("Button #" + i));

    // Button auf Formular hinzufügen (?)
    Controls.add(b);
}

// Über buttons[3] kann nun zum Beispiel auf den dritten Button
// zugegriffen werden. Soll dies auch außerhalb der Methoden
// möglich sein, muss buttons als Instanzvariable deklariert werden.

Also, die Idee dahinter ist es, irgendwo eine Liste mit Referenzen auf die Button-Instanzen zu verwalten, über die einzelne Buttons angesprochen werden können.
 
Moin

Danke für deine Antwort, aber das Problem ist, dass ich schon 10 Buttons und 10 TextBoxes im Designer erstellt habe, und der kann die nicht als Array anordnen(Jedenfalls weiss ich nicht wie).

Die Lösung, die du gepostet hast habe ich schon öfters Benützt aber danke trotzdem X-mal

Gruss
 
Geht doch einfach alle Elemte (Childs) der Form/des Parent-Elements durch und prüfe auf den Namen des Controls.

z.B. in irgendeiner Funktion in der Form.
Code:
string name = "button";
int index = 3;
foreach (Control child in this.Controls)
{
    if (child.Name == name + index.ToString())
    {
        MessageBox.Show("Found");
    }
}
Das ganze kannst du auch rekursiv machen (für alle Child-Elemente zusätzlich).

Gruß KY
 
Zurück
Oben