Prüfen ob mindestens 1 Checkbox ausgewählt wurde

  • VB.NET
  • .NET (FX) 4.0

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

    Prüfen ob mindestens 1 Checkbox ausgewählt wurde

    Hallo! Ich habe auf meiner Form eine Groupbox! In dieser befinden sich 12 Checkboxen. Mit einem Button soll überprüft werden ob mindestens 1 Checkbox ausgewählt wurde, so hätt ich mir das gedacht:

    For Each Control In GroupBox1.Controls
    If TypeOf Control Is CheckBox Then
    If Control.Checked = True Then
    Else

    Label1.Text = ("Sie müssen mindestens 1 Monat auswählen")

    End If
    End If
    Next



    Geht aber nicht! Wo is mein Denkfehler?
    1. Das ist Strict-Off-Code.
    2. Dein Fehler ist, dass erst eine Aussage darüber getroffen werden kann, ob mindestens eine Checkbox aktiviert ist, wenn alle Checkboxen geprüft wurden. Dein Code hier wird für jede nicht ausgewählte Checkbox eine Messagebox anzeigen.
    Müsste so klappen! ;) (Code aus dem Kopf geschrieben)

    Quellcode

    1. For Each cb In GroupBox1.Controls.OfType(TypeOf Checkbox)
    2. If cb.checked = true Then
    3. Label1.Text = "Sie müssen mindestens 1 Monat auswählen"
    4. Else
    5. ''''
    6. End If
    7. Next

    Ich wüsste nicht, weshalb der Code nicht alle Checkboxen in der Groupbox durchlaufen sollte! ;) Jo, kleiner Dreher bei der boolische Ausgabe.
    Liefer doch mal Deinen Code, @Artentus!

    Quellcode

    1. For Each cb In GroupBox1.Controls.OfType(Of Checkbox)()
    2. If cb.checked = false Then
    3. Label1.Text = "Sie müssen mindestens 1 Monat auswählen"
    4. Else
    5. ''''
    6. End If
    7. Next

    Hier bitte, tut was es soll:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim counter = 0
    2. For Each ctrl As CheckBox In Me.Controls.OfType(Of CheckBox)()
    3. If ctrl.Checked Then
    4. counter += 1
    5. End If
    6. Next
    7. If counter = 0 Then
    8. MessageBox.Show("Mindestens ein Element auswählen")
    9. End If


    8-) faxe1008 8-)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. If Me.Controls.OfType(Of CheckBox).Where(Function(x) x.Checked).Count() = 0 Then
    4. Me.Text = "Keine gewählt"
    5. End If
    6. End Sub
    7. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Also der optimale Code lautet:

    VB.NET-Quellcode

    1. Dim inputValid = False
    2. For Each checkbox In GroupBox1.Controls.OfType(Of CheckBox)
    3. If checkbox.Checked Then
    4. inputValid = True
    5. Exit For
    6. End If
    7. Next
    8. If Not inputValid Then MessageBox.Show("Bitte wählen sie mindesten eine Option.")
    Kein Zählen notwendig und die Schleife läuft nur so lange, wie es nötig ist. Ist Microoptimierung, aber naja. :D

    @StormySunshine
    Du hast immer noch nen Denkfehler. Bei diesem Code wird für jede nicht gecheckte Checkbox eine Messagebox ausgegeben, es soll ja aber nur eine ausgegeben werden, wenn gar keine gecheckt ist.

    vierkant schrieb:

    Es funktioniert
    Hast Du die Lösung vom @ErfinderDesRades auch verstanden? Die komplette Logik steht bei @Artentus und so ist sie eigentlich für jedermann verständlich.
    Auch ich würde hier nicht mit LINQ arbeiten, weil es länger braucht, den Inhalt zu überblicken.
    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!