[Gelöst] Immer nur eine Checkbox aktiviert sein

  • VB.NET

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

    [Gelöst] Immer nur eine Checkbox aktiviert sein

    Hallo !
    Ich habe in meinem Programm 3 Checkboxen aber es darf immer nur in einer ein Häkchen sein also es darf immer nur eine den Status checked haben.
    Mit dem Code klappt es nicht :

    VB.NET-Quellcode

    1. if CheckBox1.checked then
    2. CheckBox2.checked = false
    3. CheckBox3.checked = false



    Mit visible , enabled und checkstate klappte es auch nicht...
    Brauche es sehr dringend für meine Prog.

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

    Habe jetzt eine Checkbox rausgenommen und jezt lassen sich wider mehrere anklicken...
    Wo liegt der Fehler ??? (Mit dem VB Quellcode klappt grad iwie nich...)



    Private Sub CheckBox6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox6.CheckedChanged
    If CheckBox6.Checked Then
    CheckBox7.Checked = False
    CheckBox8.Checked = False
    CheckBox9.Checked = False
    End If
    End Sub

    Private Sub CheckBox7_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    If CheckBox7.Checked Then
    CheckBox6.Checked = False
    CheckBox7.Checked = False
    CheckBox9.Checked = False
    End If
    End Sub

    Private Sub CheckBox8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox8.CheckedChanged
    If CheckBox8.Checked Then
    CheckBox6.Checked = False
    CheckBox7.Checked = False
    CheckBox9.Checked = False
    End If
    End Sub

    Private Sub CheckBox9_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    If CheckBox9.Checked Then
    CheckBox6.Checked = False
    CheckBox7.Checked = False
    CheckBox8.Checked = False
    End If
    End Sub
    Dankeschön.
    Keine Ahnung wie das weggekommen ist...
    Habe noch einen kleinen Fehler gefunden aber ist schon behoben :D
    Großen Dank an alle!

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

    Hatte gerade Zeit ^^

    VB.NET-Quellcode

    1. Private Sub DeactivateOther(ByVal sender As Object)
    2. Dim MyName As String = DirectCast(sender, CheckBox).Name
    3. For Each ctrl As Control In Me.Controls
    4. If TypeOf ctrl Is CheckBox Then
    5. Dim chck As CheckBox = CType(ctrl, CheckBox)
    6. If Not chck.Name = MyName Then
    7. chck.Checked = False
    8. End If
    9. End If
    10. Next
    11. End Sub

    Aufruf:

    VB.NET-Quellcode

    1. Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged, CheckBox5.CheckedChanged, CheckBox6.CheckedChanged
    2. DeactivateOther(sender)
    3. End Sub

    Ein Problem: Wenn schon eine CheckBox selektiert ist, musst du 2 mal auf eine andere klicken

    Grüsse
    Pascal
    @PascalN
    Das Problem mit dem 2x klicken rührt daher, dass das Verändern der Checked.Eigenschaft erneut CheckedChanged aufruft.
    z.B.
    1. CB1 ist bereits checked
    2. CB2 Anklicken > Checkedchanged mit Sender CB2
    3. CB1 wird checked = false > Checkedchanged mit Sender CB1 !
    4. CB2 wird auch checked = false gesetzt
    Dadurch sind alle CBs unchecked. Es müßte also für die Umschalterei RemoveHandler genutzt werden. Danach wieder AddHandler. Aber wozu der Aufwand?
    Darum: NIMM DOCH EINFACH RADIOBUTTON!!! Die sind dafür da
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: