Wert gecheckter CheckBox/en ausgeben

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Patrick1993.

    Wert gecheckter CheckBox/en ausgeben

    Hallo Community,
    Ich bin an einem Rechtesystem für ein Tool am arbeiten. In dem Rechtesystem hat man 4-5 Verschiedene Rechte die durch CheckBoxen vergeben werden.
    Nun steht ich vor folgendem Problem:
    Ich will ohne 25 IF-Abfragen Überprüfen, welche CheckBox/en gechekt ist/sind und dessen Wert dann ausgeben.

    Beispiel:
    CheckBox1 ist gechekt dann wird nur der Wert von CheckBox1 ausgegebenen
    Wenn jetzt CheckBox1 und CheckBox2 gechekt sind, dann soll der wert beider CheckBoxen ausgegeben werden
    usw....

    Wie kann man sowas am einfachsten Anstellen ?

    Hey,

    Linq ist Dein Freund...

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    2. Dim result = From c As CheckBox In Me.Controls.OfType(Of CheckBox)() Select c Where c.Checked
    3. For Each c As CheckBox In result
    4. MessageBox.Show(c.Name & " checked=" & c.Checked.ToString())
    5. Next
    6. End Sub
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Etwas zum Spielen. Benötigt: ein Label, ein Panel und ein paar Checkboxen darin. Die Elemente werden in "ausgewählteElemente" gespeichert, falls du sie noch weiterverwerten möchtest.

    VB.NET-Quellcode

    1. Dim ausgewählteElemente As New List(Of String)
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. For Each element As CheckBox In Panel1.Controls.OfType(Of CheckBox)()
    4. AddHandler element.CheckedChanged, Sub(chk_sender As Object, chk_e As EventArgs)
    5. If DirectCast(chk_sender, CheckBox).Checked Then
    6. ausgewählteElemente.Add(DirectCast(chk_sender, CheckBox).Text)
    7. Else
    8. ausgewählteElemente.Remove(DirectCast(chk_sender, CheckBox).Text)
    9. End If
    10. Label1.Text = String.Join(", ", ausgewählteElemente.ToArray)
    11. End Sub
    12. Next
    13. End Sub
    Generiere Dir ein Flags-Enum, in dem die CheckBoxen je ein Bit setzen.
    5 CheckBoxen, ein Label:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. <Flags()> _
    3. Public Enum Rechte
    4. Recht0 = 0
    5. Recht1 = 1
    6. Recht2 = 2
    7. Recht3 = 4
    8. Recht4 = 8
    9. Recht5 = 16
    10. End Enum
    11. Private MyRecht As Rechte = Rechte.Recht0
    12. Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged
    13. If CheckBox1.Checked Then
    14. MyRecht = MyRecht Or Rechte.Recht1
    15. Else
    16. MyRecht = MyRecht And Not Rechte.Recht1
    17. End If
    18. Label1.Text = MyRecht.ToString
    19. End Sub
    20. Private Sub CheckBox2_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox2.CheckedChanged
    21. If CheckBox2.Checked Then
    22. MyRecht = MyRecht Or Rechte.Recht2
    23. Else
    24. MyRecht = MyRecht And Not Rechte.Recht2
    25. End If
    26. Label1.Text = MyRecht.ToString
    27. End Sub
    28. Private Sub CheckBox3_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox3.CheckedChanged
    29. If CheckBox3.Checked Then
    30. MyRecht = MyRecht Or Rechte.Recht3
    31. Else
    32. MyRecht = MyRecht And Not Rechte.Recht3
    33. End If
    34. Label1.Text = MyRecht.ToString
    35. End Sub
    36. Private Sub CheckBox4_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox4.CheckedChanged
    37. If CheckBox4.Checked Then
    38. MyRecht = MyRecht Or Rechte.Recht4
    39. Else
    40. MyRecht = MyRecht And Not Rechte.Recht4
    41. End If
    42. Label1.Text = MyRecht.ToString
    43. End Sub
    44. Private Sub CheckBox5_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox5.CheckedChanged
    45. If CheckBox5.Checked Then
    46. MyRecht = MyRecht Or Rechte.Recht5
    47. Else
    48. MyRecht = MyRecht And Not Rechte.Recht5
    49. End If
    50. Label1.Text = MyRecht.ToString
    51. End Sub
    52. End Class
    So ausführlich, damit Dir das Verfahren schnell klar wird.
    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!
    @RodFromGermany: Hey, du hast mir meinen Post geklaut! Genau das wollte ich auch schreiben. ;)

    Ich würde es allerdings so umsetzen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. <Flags()> _
    3. Public Enum Rechte
    4. Recht0 = 0
    5. Recht1 = 1
    6. Recht2 = 2
    7. Recht3 = 4
    8. Recht4 = 8
    9. Recht5 = 16
    10. End Enum
    11. Private MyRecht As Rechte = Rechte.Recht0
    12. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    13. CheckBox1.Tag = Rechte.Recht0
    14. CheckBox2.Tag = Rechte.Recht1
    15. CheckBox3.Tag = Rechte.Recht2
    16. CheckBox4.Tag = Rechte.Recht3
    17. CheckBox5.Tag = Rechte.Recht4
    18. CheckBox6.Tag = Rechte.Recht5
    19. End Sub
    20. Private Sub SomeCheckbox_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged, CheckBox5.CheckedChanged, CheckBox6.CheckedChanged
    21. Dim cb as CheckBox = DirectCast(sender, CheckBox)
    22. If cb Is Nothing Then Exit Sub
    23. Dim rechteMarker as Rechte = DirectCast(cb.Tag, Rechte)
    24. If cb.Checked Then
    25. MyRecht = MyRecht Or rechteMarker
    26. Else
    27. MyRecht = MyRecht And Not rechteMarker
    28. End If
    29. Label1.Text = MyRecht.ToString()
    30. End Sub
    31. End Class
    (6 Checkboxen, 6 Rechte, ein Label und eine Form)


    Übrigens: Bei der Verwendung des Flags-Attribut erhalten die Enum-Member automatisch 2er-Potenz-Werte. ;)
    Edit: Hab mich geirrt, ist leider doch nicht so: ideone.com/k46XT7
    Von meinem iPhone gesendet

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

    nikeee13 schrieb:

    Hey, du hast mir meinen Post geklaut!
    Wie Du siehst, kann ich Gedanken lesen.
    Die Lösung mit dem Tag ist gut, doch ich wollte den TE nicht überlasten, weil hier immer noch einige Kollegen "Angst" vor den Enums haben, insbesondere, wenn es sich um Flags handelt.
    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!
    Wenn ich jetzt die "Version" von der_Kurt nehme dann müsste ich wenn ich die Rechte in eine Datenbank schreiben will einfach nur die ListeOf in die Spalte schreiben richtig ?