kurdirektor
Goto Top

Visual Basic - Checkbox Auswahl begrenzen und restliche unchecked boxen deaktivieren

Hallo,

ich habe in meinem Programm Checkbox1 bis Checkbox63. Diese sind unterteilt in 3 Bereiche - Jeweils 21 Boxen in einer Gruppe (händisch gruppiert ohne Groupbox!)
Eine Gruppierung durch eine Groupbox ist nicht möglich, da die Checkboxen in eine Picturebox eingearbeitet sind. (Oder ist es doch noch möglich ohne die Grafik in dem Bereich zu beinflussen?)

In jeder Gruppe wird bereits erfasst wie viele Boxen angeklickt wurden.

Jetzt möchte ich aber die Auswahl an Checkboxen auf einen Maximalwert begrenzen und bei erreichen des Maximalwerts sollen alle Checkboxen die den Status "unchecked" haben deaktiviert bzw. für den Benutzer nicht mehr anwählbar sein.
Dafür müsste ich ja dann erst einmal prüfen welche Checkboxen aktiv und welche inaktiv sind.
Googel hat mir da bisher nicht wirklich weiterhelfen können.

Ich bräuchte jetzt Hilfe den Code dafür zu erstellen.

Wäre dies hier eine Möglichkeit?

if Checkboxgroup1 = 5 and Checkbox1.unchecked then
CheckBox1.CanSelect = False
End If

Oder gibt es eine Einfachere Methode per Array?

Vielen Dank im Voraus!

Content-Key: 254025

Url: https://administrator.de/contentid/254025

Printed on: April 25, 2024 at 15:04 o'clock

Member: colinardo
Solution colinardo Nov 06, 2014 updated at 12:25:06 (UTC)
Goto Top
Hallo Kurdirektor,
Eine Gruppierung durch eine Groupbox ist nicht möglich, da die Checkboxen in eine Picturebox eingearbeitet sind. (Oder ist es doch noch möglich ohne die Grafik in dem Bereich zu beinflussen?)
erklär mal bitte wie du eine Checkbox in eine PictureBox "eingearbeitet" hast ??? wie soll das bitte gehen ?

Am einfachsten ist es die Controls alle in eine GroupBox zu stecken, ich sehe nicht wo hier dein Problem ist.
Dann lassen sich die Controls über die Controls-Eigenschaft iterieren und jeweils prüfen ob sie deaktiviert werden müssen oder nicht.

Als Alternative kannst du den Checkboxen auch in der Eigenschaft Tag ein Gruppentag zuweisen welches du mit einer Schleife über alle Controls in der Form prüfst und dann jeweils deine Aktion an den Checkboxen vornimmst.

Beispiel mit Tags an den Checkboxen:
 Sub checkGroup1()
     Dim action As Boolean

     'dein Maximalwert prüfen (die Variable 'counter' enthält deine gezählte Anzahl aktivierten Checkboxen)  
     If counter >= 20 Then
         action = False
     Else
         action = True
     End If

     For Each c As Control In Me.Controls
         If TypeOf c Is CheckBox Then
             'Wenn das Tag der Checkbox 'Group1' lautet  
             If c.Tag = "Group1" Then  
                 Dim cb = CType(c, CheckBox)
                 If cb.Checked = False Then
                     cb.Enabled = action
                 End If
             End If
         End If
     Next
 End Sub

Falls dir das nicht klar sein sollte, hier eine komplette Demo als Visual Studio 2010 Projekt zum Download.

Grüße Uwe
Member: Kurdirektor
Kurdirektor Nov 06, 2014 at 12:25:36 (UTC)
Goto Top
Passt, danke