Welche CheckBox ist gecheckt?

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von FreShmaKer.

    Welche CheckBox ist gecheckt?

    Haaaii :D

    Ich mache es gaaanz kurz. Ich habe 5 CheckBoxen und möchte gerne in einem Button_Click-Event herausfinden, welche der CheckBoxen gechecked ist. Das ganze möchte ich gerne als String wiedergeben, da ich eine If-Abfrage sehr aufwending und "unschön" finde.

    How can I solve it the easiest? :)
    Meinst Du so was:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Dim check As String = ""
    3. If Me.CheckBox1.Checked Then check &= "1"
    4. If Me.CheckBox2.Checked Then check &= "2"
    5. If Me.CheckBox3.Checked Then check &= "3"
    6. If Me.CheckBox4.Checked Then check &= "4"
    7. If Me.CheckBox5.Checked Then check &= "5"
    8. MessageBox.Show(check)
    9. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hmm was soll das für einen Sinn haben? Der Benutzer sieht doch am Haken, welche Boxen gechecked sind und welche nicht.
    Und das Programm kriegt Änderungen am Checked-Event mitgeteilt...?
    aber..:

    VB.NET-Quellcode

    1. Dim WelcheBoxen As String = ""
    2. For Each CheckBoxName In (From crt In Me.Controls.OfType(Of CheckBox)() Where crt.CheckState = CheckState.Checked Select crt.Name).ToArray
    3. WelcheBoxen &= CheckBoxName.ToString & vbNewLine
    4. Next
    5. MessageBox.Show(WelcheBoxen)
    Der Sinn ergibt sich aus diesem Post! :)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim nKn = TreeView1.Nodes.Add(bninfo)
    2. For Each k As String In {welche CheckBox wurde gechecked)"} : nKn.Nodes.Add(k) : Next
    3. TreeView1.CollapseAll()



    Kann ich den String auch in den Code einfügen, sodass für jede CheckBox ein Nodes erstellt wird? ?(
    eijo =) so wie du es geschrieben hast...
    einfach statt welcheBoxen deine Nodes erstellen

    VB.NET-Quellcode

    1. For Each CheckBoxName In (From crt In Me.Controls.OfType(Of CheckBox)() Where crt.CheckState = CheckState.Checked Select crt.Name).ToArray
    2. TreeView1.Nodes.Add(CheckBoxName)
    3. Next
    Wenn ich den nachbenannte Code nehme, dann wird nicht für jede CheckBox ein Nodes erstellt, vielmehr stehen dann alle ohne Komma-Strick und.... hintereinander.

    Es sollen aber alle einzeln aufgeführt werden. Wie komm ich damit weiter :?: ?(

    Spoiler anzeigen

    VB.NET-Quellcode

    1. If CheckBox1.Checked Then hcbtrue &= "CB 1"
    2. If CheckBox2.Checked Then hcbtrue &= "CB 2"
    3. If CheckBox3.Checked Then hcbtrue &= "CB 3"
    4. If CheckBox4.Checked Then hcbtrue &= "CB 4"
    5. Dim testnode = TreeView1.Nodes.Add("TreeviewTest")
    6. For Each k As String In {hcbtrue} : testnode.Nodes.Add(k) : Next
    joa is ja auch klar....
    Du baust ja auch nur einen einzigen String zusammen... und nicht eine Auflistung oder array oder sonstwas, was du mit For..each durchlaufen könntest.
    In meinem Beispiel erststelle ich ein Array, in dem alle angeklickten boxenNamen zu finden sind... die kann ich dann auch einzeln da raus rufen.
    Solltest du dir dann mal genauer anschauen.
    So wie Du das löst musst du deinen zusammengebauten string, weil es ist ja nun mal nur EINER, da... immer mit & verknüpft, erst mal wieder an den Lehrstellen oder wo auch immer auseinander dividieren und in ein array packen....
    Ich empfehle dir mal meine Variante genau anzuschauen... falls du was nicht verstehst.. fragen
    Nunja wenns die Version sein soll...
    speicherste deinen Status halt auch in ner List und nicht in nem String ;)

    VB.NET-Quellcode

    1. Dim hcbtrue As New List(Of String)
    2. If CheckBox1.Checked Then hcbtrue.Add("CB 1")
    3. If CheckBox2.Checked Then hcbtrue.Add("CB 2")
    4. If CheckBox3.Checked Then hcbtrue.Add("CB 3")
    5. If CheckBox4.Checked Then hcbtrue.Add("CB 4")
    6. Dim testnode = TreeView1.Nodes.Add("TreeviewTest")
    7. For Each Str As String In hcbtrue
    8. testnode.Nodes.Add(Str)
    9. Next
    Ah cool. Habe es ein wenig umgeschrieben. Dein Lösungsvorschlag hat mir aber gut geholfen. In einer List macht es ja nun nicht viel Unterschied ^^

    Damit jeder etwas davon hat, hier meinen fertigen Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    2. Dim nKn = TreeView1.Nodes.Add(ComboBox3.SelectedItem)
    3. For Each k As String In {bninfo} : nKn.Nodes.Add(k) : Next 'bninfo stellt lediglich eine Information über den Ersteller des Nodes dar
    4. Dim hcbtrue As New List(Of String)
    5. If CheckBox1.Checked Then hcbtrue.Add("CheckBox1")
    6. If CheckBox2.Checked Then hcbtrue.Add("CheckBox2")
    7. If CheckBox3.Checked Then hcbtrue.Add("CheckBox3")
    8. If CheckBox4.Checked Then hcbtrue.Add("CheckBox4")
    9. For Each nds As String In hcbtrue
    10. nKn.Nodes.Add(nds)
    11. Next
    12. TreeView1.CollapseAll()
    13. ComboBox3.SelectedIndex = 0
    14. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „FreShmaKer“ ()