none
RadioButton Array aus bereits vorhandenen RadioButtons RRS feed

  • 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

    Montag, 15. Februar 2016 08:22

Antworten

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

    Montag, 15. Februar 2016 08:51
  • Dann tritt beim Simulieren eine NullReferenceException auf. Keine Ahnung warum. Es muss ja folglich ein Null-Objekt sein, also ein leeres Objekt? Also müsste ja etwas mit den Instanzen nicht stimmen, oder?
    Montag, 15. Februar 2016 09:12
  • 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
    Montag, 15. Februar 2016 09:32
  • Vielen Dank erstmal.

    Ich denke ich werde die RadioButtons als Array anlegen, dann sollte es klappen. 

    Muss dann nur die ganzen Attribute mitgeben, wie du bereits sagtest. 

    Montag, 15. Februar 2016 09:40
  • 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

    Montag, 15. Februar 2016 12:19
    Moderator
  • Ah, 

    das ist natürlich die einfachste Variante :D.

    Manchmal sieht man den Wald vor lauter Bäumen nicht. ;)

    das Array nicht gefüllt...... hätte ich auch drauf kommen können

    Vielen vielen Dank 

    Montag, 15. Februar 2016 12:56