Benutzer mit den meisten Antworten
RadioButton Array aus bereits vorhandenen RadioButtons

Frage
-
Hallo,
ich bin Einsteiger und versuche im Moment eine Form zu erstellen. Ich habe 8 RadioButtons die einfach nur Zustände anzeigen sollen.
Dafür existiert ein boolsches Array zustaende[] mit der Länge 8 in dem die Zustände für den jeweiligen RadioButton liegen. Die RadioButtons befinden sich bereits in der Form und es gibt einige Events für die ich Methoden habe.
radioButton0.Checked = zustaende[0];
radioButton1.Checked = zustaende[1];
radioButton2.Checked = zustaende[2];
radioButton3.Checked = zustaende[3];
radioButton4.Checked = zustaende[4];
radioButton5.Checked = zustaende[5];
radioButton6.Checked = zustaende[6];
radioButton7.Checked = zustaende[7];Nun meine Frage: Wie kann ich diese Zusweisung in einer Schleife abarbeiten? Der folgende Code funktioniert leider nicht.
System.Windows.Forms.RadioButton[] radioButton = new System.Windows.Forms.RadioButton[8];
for(int i = 0; i <= 7; i++)
{
radioButton[i] = new RadioButton();//liegt hier das Problem, da die ich bereits existierende RBs habe??
radioButton[i].Checked = zustaende[i];
}Mein eigentliches Denkproblem ist ja die Instanzierung auf die entsprechenden RadioButtons, denke ich.
Vielen Dank für eure Hilfe
Antworten
-
Hallo Robert,
dein Code oben ist schon fast richtig und einer Instanziierung der RadioButtons in deinem Code bedarf es auch nicht.
Bisher legst du ein leeres Array vom Typ RadioButton[] an. Dort sind ohne Zuweisung alle RB's darin Null, daher die Exception. Du musst das Array nur mit den bereits vorhandenen RB's füllen:
System.Windows.Forms.RadioButton[] radioButton = new System.Windows.Forms.RadioButton[]{ radioButton1, radioButton2, radioButton3, radioButton4, radioButton5, radioButton6, radioButton7, radioButton8 };
Dann kannst du das Array einfach in einer Schleife durchlaufen, ohne die Controls neu zu instanziieren, und auf die Instanzen zugreifen.for(int i = 0; i <= radioButton.Length; i++) { radioButton[i].Checked = zustaende[i]; }
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Donnerstag, 3. März 2016 12:12
- Als Antwort markiert Aleksander Chalabashiev Mittwoch, 9. März 2016 08:54
Alle Antworten
-
Hallo Robert,
wenn die Radiobuttons tatsächlich bereits in der Form vorliegen, musst Du natürlich keine neuen Instanzen anlegen, das hast Du ja in Deinem Kommentar bereits selbst schon vermutet.
Die Zustände kannst Du mit Deiner zweiten Zeile in der Schleife eigentlich schon zuweisen.
Was passiert denn, wenn Du nur die erste Zeile in der Schleife entfernst?
Grüße
Roland
-
sorry, habe Deinen Programmcode nicht richtig angeschaut.
Die Radiobuttons in der Form sind ja nicht als Array aufgebaut, daher funktioniert natürlich auch
radioButton[i].checked = ...
nicht.
Das heißt, Du musst die RadioButtons als Array anlegen.
Das kannst Du im Prinzip so machen wie in Deinen Code, musst aber den erzeugten Radiobutton dann noch der Form Collection this.controls hinzufügen. In diesem Fall musst Du aber noch alle Attribute der Radiobuttons im Code mitgeben, z.B. die Position, da ja der im Forms-Designer generierte Radiobutton "radioButton1" nicht mit Deinem im Code erzeugten "radioButton[1]" zu tun hat.
Prinzipielle würde ich mir aber noch einmal genau überlegen, was Du vor hast und gegebenfalls ein andern Weg wählen.
Grüße
Roland
- Bearbeitet Roland Franz Montag, 15. Februar 2016 09:47 Tippfehler beseitigt
-
Hallo Robert,
dein Code oben ist schon fast richtig und einer Instanziierung der RadioButtons in deinem Code bedarf es auch nicht.
Bisher legst du ein leeres Array vom Typ RadioButton[] an. Dort sind ohne Zuweisung alle RB's darin Null, daher die Exception. Du musst das Array nur mit den bereits vorhandenen RB's füllen:
System.Windows.Forms.RadioButton[] radioButton = new System.Windows.Forms.RadioButton[]{ radioButton1, radioButton2, radioButton3, radioButton4, radioButton5, radioButton6, radioButton7, radioButton8 };
Dann kannst du das Array einfach in einer Schleife durchlaufen, ohne die Controls neu zu instanziieren, und auf die Instanzen zugreifen.for(int i = 0; i <= radioButton.Length; i++) { radioButton[i].Checked = zustaende[i]; }
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Donnerstag, 3. März 2016 12:12
- Als Antwort markiert Aleksander Chalabashiev Mittwoch, 9. März 2016 08:54