Checkboxen checked

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Aod.

    Checkboxen checked

    Hallo,
    wie kann ich überprüfen ob eine, mehrere oder alles Checkboxen checked sind? und das in nur einer Messagebox darstellen.
    Also wenn gar keine Checkbox checked ist soll ein msg box kommen und wenn nur ein oder mehrere checked sind soll auch nur eine msg box kommen.

    Hoffe ihr konntet mein Problem verstehen...

    Mfg
    Bilder
    • Unbenannt.png

      1,64 kB, 66×335, 224 mal angesehen

    VB.NET-Quellcode

    1. Dim a As Integer = 0
    2. Dim g As Integer = 0
    3. For Each chk in Me.Controls.OfType(Of CheckBox)
    4. If chk.Checked Then a += 1
    5. g += 1
    6. Next
    7. If a = 0 Then
    8. 'keine Checkbox gecheckt
    9. End If
    10. If a > 0 AndAlso a < g Then
    11. 'nicht alle, nur ein paar
    12. End If
    13. If a = g Then
    14. 'alle
    15. End If
    16. 'Alles ungetestet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Rinecamo“ ()

    Überprüfen, ob eine CheckBox angehakt ist:

    VB.NET-Quellcode

    1. If CheckBoxX.Checked Then
    2. ' ...
    3. End If
    Wenn du die Anzahl der angehakten CheckBoxen in deinem Form zählen und je nach dem Ergebnis verschiedene MessageBoxen ausgeben willst, kannst du das unter anderem so lösen:

    VB.NET-Quellcode

    1. Dim CheckedCount As Integer
    2. For Each Cb As CheckBox In Controls.OfType(Of CheckBox)
    3. If Cb.Checked Then CheckedCount += 1
    4. Next
    5. If CheckedCount = 0 Then
    6. MessageBox.Show("Nichts angehakt")
    7. ElseIf CheckedCount = 1 Then
    8. MessageBox.Show("Eins angehakt")
    9. Else
    10. MessageBox.Show(CheckedCount.ToString() & " CheckBoxen sind angehakt.")
    11. End If

    Edit: Zu langsam. :b
    Hallo Haiyyu,
    ich habe deinen Beispiel Code mal ausprobiert

    VB.NET-Quellcode

    1. Dim CheckedCount As Integer
    2. For Each Cb As CheckBox In Controls.OfType(Of CheckBox)
    3. If Cb.Checked Then CheckedCount += 1
    4. Next
    5. If CheckedCount = 0 Then
    6. MessageBox.Show("Nichts angehakt")
    7. ElseIf CheckedCount = 1 Then
    8. MessageBox.Show("Eins angehakt")
    9. Else
    10. MessageBox.Show(CheckedCount.ToString() & " CheckBoxen sind angehakt.")
    11. End If


    Allerdings habe ich viele CheckBoxen auf verschiedenen Panel plaziert. Was muss ich machen damit diese mit gezählt werden?
    Du musst dir eine Function basteln welche als Parameter ein Control entgegenimmt. Falls das durchlaufene Control ein Container ist musst du diese Function selbst wieder aufrufen mit dem Container als Parameter (Rekursion)

    Such mal nach Rekursiv hier im Forum. Da wirste fündig werden.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Hallo Fichz,
    Der Code klapt ja soweit. Er zählt alle CheckBoxen wie gewollt. Aber er zählt leider nicht die CheckBoxen die in einem Panel sind.

    (Ich bin noch blutiger anfänger insachen VB2010 und programmierung allgemein und weiß nicht wie ich sagen kann das er im panel die checkbox suchen soll)
    Kannst auch in jeden Checkbox1.changed eine zeile eintragen:

    VB.NET-Quellcode

    1. if checkbox1.enabled=true then CB +=1
    2. if checkbox1.enabled=False then if CB>0 then CB -=1


    VB.NET-Quellcode

    1. ' nicht vergessen CB Public setzen
    2. public CB as integer



    Auswertung ist dann ja einfach:

    VB.NET-Quellcode

    1. MessageBox.Show(CB & " CheckBoxen sind angehakt.")
    @Fichz,

    Ich bin immer noch blutiger anfänger....
    Wenn ich es richtig verstehe bedeutet Rekursiv soviel wie

    VB.NET-Quellcode

    1. If CheckBox1.Checked = True Then
    2. If CheckBox1.Checked = True Then
    3. If CheckBox1.Checked = True Then
    4. If CheckBox1.Checked = True Then
    5. End If
    6. End If
    7. End If
    8. End If



    Das Problem ist nur das ich trotzdem nicht die Befehle für das Panel kenne.

    Aod schrieb:

    Rekursiv soviel wie
    Rekursion ist eine Schleife, bei der eine Prozedur sich selbst (rekursiv) aufruft. Ohne eine Abbruchbedingung führt das zu einem Stack-Overflow.
    Das, was Du da hingeschrieben hast, ist eine UND-Verknüpfung mehrer (identischer) zustände, Du müsstest die Namen der CheckBoxen anpassen.
    Dies ginge auch so:

    VB.NET-Quellcode

    1. If Cb1.Checked AndAlso Cb2.Checked AndAlso Cb3.Checked AndAlso Cb4.Checked Then
    2. ' ...
    3. End If
    4. ' im Gegensatz zu einer OR-Verknüpfung
    5. If Cb1.Checked OrElse Cb2.Checked OrElse Cb3.Checked OrElse Cb4.Checked Then
    6. ' ...
    7. End If
    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!

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim allCheckBoxex = GetControls(Of CheckBox)(Me)
    4. Dim query = From c As CheckBox In allCheckBoxex Select c Where c.Checked
    5. Select Case query.Count
    6. Case 0
    7. MessageBox.Show("Keine ausgewählt")
    8. Case 1 To allCheckBoxex.Count - 1
    9. MessageBox.Show(query.Count.ToString() & " sind ausgewählt")
    10. Case allCheckBoxex.Count
    11. MessageBox.Show("Alle ausgewählt")
    12. End Select
    13. End Sub
    14. Private Function GetControls(Of T As Control)(ByVal parent As Control) As List(Of T)
    15. Dim list As New List(Of T)
    16. For Each c As Control In parent.Controls
    17. If c.HasChildren Then
    18. list.AddRange(GetControls(Of T)(c))
    19. Else
    20. If TypeOf (c) Is T Then
    21. list.Add(DirectCast(c, T))
    22. End If
    23. End If
    24. Next
    25. Return list
    26. End Function
    27. End Class


    EDIT: Code optimiert!
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SpaceyX“ ()

    Hallo SpaceyX,
    Danke für den Code :)

    jetzt mal noch eine weitere frage dazu.
    vb-paradise.de/user/16877-spaceyx/Ich habe mehrere checkboxen mit dem namen "Checkboxi***" und "Checkbox***"

    Das Skript erkennt ja beides als Checkboxen. Wie könnte man es denn machen das nur die "Checkboxi***" gezählt werden?