2.5 Kontrollkästchen, Optionsschaltfläche, Gruppe 

Mithilfe der beiden Steuerelemente Kontrollkästchen und Optionsschaltfläche können Zustände unterschieden bzw. Eigenschaften eingestellt werden. Dazu werden Verzweigungen benötigt, die Gegenstand des vorherigen Abschnitts waren.
2.5.1 Kontrollkästchen 

Checkbox
Das Kontrollkästchen (Checkbox) bietet dem Benutzer die Möglichkeit, zwischen zwei Zuständen zu wählen, z. B. An oder Aus, wie bei einem Schalter. Man kann damit auch kennzeichnen, ob man eine bestimmte optionale Erweiterung wünscht oder nicht. Der Benutzer bedient ein Kontrollkästchen, indem er ein Häkchen setzt oder entfernt.
CheckedChanged
Das wichtigste Ereignis ist beim Kontrollkästchen nicht der Click, sondern das Ereignis CheckedChanged. Dieses Ereignis zeigt nicht nur an, dass das Kontrollkästchen vom Benutzer bedient wurde, sondern auch, dass es seinen Zustand geändert hat. Dies kann beispielsweise auch durch Programmcode geschehen. Eine Ereignisprozedur zu CheckedChanged löst in jedem Fall etwas aus, sobald das Kontrollkästchen (vom Benutzer oder vom Programmcode) geändert wurde.
An/Aus
Allerdings wird der Programmablauf meist so gestaltet, dass bei einem anderen Ereignis der aktuelle Zustand des Kontrollkästchens (An/Aus) abgefragt und anschließend je nach Zustand unterschiedlich reagiert wird.
Die wichtigen Eigenschaften des Kontrollkästchens sind:
- Checked - der Zustand der Checkbox, mit den Werten True und False
Checked
- Text – die Beschriftung neben dem Kontrollkästchen
Im nachfolgenden Programm p0224 werden alle oben genannten Möglichkeiten genutzt:
Abbildung 2.25 Zustand nach Klick auf Kontrollkästchen
Public Class frm0224
Private Sub cmdEreignis_Click( ... ) Handles ...
If chkSchalter.Checked Then
lblTest1.Text = "An"
Else
lblTest1.Text = "Aus"
End If
End Sub
Private Sub chkSchalter_CheckedChanged( ... ) _
Handles ...
If chkSchalter.Checked Then
lblTest2.Text = "An"
Else
lblTest2.Text = "Aus"
End If
End Sub
Private Sub cmdAnschalten_Click( ... ) Handles ...
chkSchalter.Checked = True
End Sub
End ClassZur Erläuterung:
- Der Zustand eines Kontrollkästchens (Häkchen gesetzt oder nicht) kann im Programm mithilfe einer einfachen Verzweigung ausgewertet werden.
- Normalerweise werden bei einer Bedingung in einer Verzweigung zwei Werte durch Vergleichsoperatoren miteinander verglichen und eines der beiden Ergebnisse True oder False ermittelt. Da die Eigenschaft Checked aber bereits einem solchen Wahrheitswert entspricht, kann die Bedingung auch verkürzt formuliert werden. If chkSchalter.Checked = True ... hätte also das gleiche Ergebnis erzeugt.
Wahrheitswert
- Die Prozedur cmdEreignis_Click() wird aufgerufen, wenn der Benutzer den Button Ereignis betätigt. Erst in diesem Moment wird der Zustand des Kontrollkästchens (Eigenschaft Checked = True oder False) abgefragt und im ersten Label ausgegeben. Es kann also sein, dass das Kontrollkästchen vor längerer Zeit oder noch nie benutzt wurde.
- Dagegen wird die Prozedur chkSchalter_CheckedChanged() sofort aufgerufen, wenn der Benutzer das Kontrollkästchen benutzt, also ein Häkchen setzt oder entfernt. Die Prozedur wird auch dann aufgerufen, wenn der Benutzer den Zustand des Kontrollkästchens durch Programmcode ändert. Hier wird der Zustand des Kontrollkästchens also unmittelbar nach der Änderung ausgegeben (im zweiten Label).
- Die Prozedur cmdAnschalten_Click() dient zum Setzen des Häkchens beim Kontrollkästchen per Programmcode. Dies kommt in Windows-Anwendungen häufig vor, wenn es logische Zusammenhänge zwischen mehreren Steuerelementen gibt. Die Eigenschaft Checked wird auf True gesetzt. Dies führt wiederum zum Ereignis chkSchalter_CheckedChanged und dem Ablauf der zugehörigen, oben erläuterten Ereignisprozedur.
2.5.2 Optionsschaltfläche 

Radio Button
Optionsschaltflächen (Radio Buttons) treten immer in Gruppen auf und bieten dem Benutzer die Möglichkeit, zwischen zwei oder mehr Möglichkeiten zu wählen, etwa zwischen den Farben Rot, Grün oder Blau. Bei zusammengehörigen Optionsschaltflächen kann der Benutzer genau eine per Klick auswählen. Alle anderen werden dann unmittelbar als »Nicht ausgewählt« gekennzeichnet.
CheckedChanged
Analog zum Kontrollkästchen ist das wichtigste Ereignis bei einer Optionsschaltfläche CheckedChanged. Dieses Ereignis zeigt nicht nur an, dass die betreffende Optionsschaltfläche vom Benutzer ausgewählt wurde, sondern auch, dass sie ihren Zustand geändert hat. Dies kann auch durch Programmcode geschehen.
Der Programmablauf wird auch hier meist so gestaltet, dass bei einem anderen Ereignis der aktuelle Zustand der Gruppe abgefragt wird und anschließend je nach Zustand unterschiedlich reagiert wird.
Es ist guter Programmierstil und verringert Folgefehler, wenn man eine der Optionsschaltflächen der Gruppe bereits zur Entwicklungszeit auf True setzt. Dies muss nicht notwendigerweise die erste Optionsschaltfläche der Gruppe sein.
Checked
Die wichtigen Eigenschaften der Optionsschaltflächen sind Checked (mit den Werten True und False) und Text (zur Beschriftung). Im nachfolgenden Programm p0225 werden alle genannten Möglichkeiten genutzt. Es wird der Zustand angezeigt, nachdem der Benutzer
- Blau gewählt,
- den Button Ereignis betätigt,
- Grün gewählt hat (siehe Abbildung 2.26).
Public Class frm0225
Private Sub cmdEreignis_Click( ... ) Handles ...
If optFarbeRot.Checked Then
lblAnzeige1.Text = "Rot"
ElseIf optFarbeGrün.Checked Then
lblAnzeige1.Text = "Grün"
Else
lblAnzeige1.Text = "Blau"
End If
End Sub
Private Sub optFarbeRot_CheckedChanged( ... ) _
Handles ...
If optFarbeRot.Checked Then
lblAnzeige2.Text = "Rot"
End If
End Sub
Private Sub optFarbeGrün_CheckedChanged( ... ) _
Handles ...
If optFarbeGrün.Checked Then
lblAnzeige2.Text = "Grün"
End If
End Sub
Private Sub optFarbeBlau_CheckedChanged( ... ) _
Handles ...
If optFarbeBlau.Checked Then
lblAnzeige2.Text = "Blau"
End If
End Sub
Private Sub cmdSchalter_Click( ... ) Handles ...
optFarbeRot.Checked = True
End Sub
End ClassAbbildung 2.26 Zustand nach zwei Klicks
Zur Erläuterung:
- Der Zustand einer einzelnen Optionsschaltfläche kann im Programm mithilfe einer einfachen Verzweigung ausgewertet werden.
- Der Zustand einer Gruppe von Optionsschaltflächen kann im Programm mithilfe einer mehrfachen Verzweigung ausgewertet werden.
- Die Prozedur cmdEreignis_Click() wird aufgerufen, wenn der Benutzer den Button Ereignis betätigt. Erst in diesem Moment wird der Zustand der Gruppe abgefragt und im ersten Label ausgegeben.
- Dagegen wird eine der Prozeduren optFarbeRot_CheckedChanged() (bzw. ...Grün... oder ...Blau...) sofort aufgerufen, wenn der Benutzer eine der Optionsschaltflächen auswählt. Diese Prozeduren werden jeweils auch dann aufgerufen, wenn der Benutzer den Zustand der zugehörigen Optionsschaltfläche durch Programmcode ändert. Hier wird der Zustand der Gruppe also unmittelbar nach der Änderung ausgegeben (im zweiten Label).
- Die Prozedur cmdAnschalten_Click() dient zur Auswahl einer bestimmten Optionsschaltfläche per Programmcode. Dies kommt in Windows-Anwendungen häufig vor, wenn es logische Zusammenhänge zwischen mehreren Steuerelementen gibt. Die Eigenschaft Checked wird auf True gesetzt. Dies führt wiederum zum Ereignis CheckedChanged der jeweiligen Optionsschaltfläche und zum Ablauf der zugehörigen, oben erläuterten Ereignisprozedur.
Innerhalb eines Formulars oder einer GroupBox (siehe übernächster Abschnitt) kann immer nur bei einer Optionsschaltfläche die Eigenschaft Checked den Wert True haben. Sobald eine andere Optionsschaltfläche angeklickt wird, ändert sich der Wert der Eigenschaft bei der bisher gültigen Optionsschaltfläche.
2.5.3 Mehrere Ereignisse in einer Prozedur behandeln 

Im Folgenden wird eine häufig verwendete Technik vorgestellt. Gibt es mehrere Ereignisse, die auf die gleiche oder auf ähnliche Weise behandelt werden sollen, ist es vorteilhaft, diese Ereignisse mit einer gemeinsamen Ereignisprozedur aufzurufen.
Handles
Dies ist möglich, da nach dem Schlüsselwort Handles zu Beginn der Ereignisprozedur mehrere Ereignisse genannt werden können. Im nachfolgenden Programm wird diese Technik verwendet, um den Zustand einer Gruppe von Optionsschaltflächen sofort anzuzeigen, wenn der Benutzer eine der Optionsschaltflächen auswählt.
Public Class frm0226
Private Sub optFarbeRot_CheckedChanged( ... ) _
Handles optFarbeRot.CheckedChanged, _
optFarbeGrün.CheckedChanged, _
optFarbeBlau.CheckedChanged
If optFarbeRot.Checked Then
lblAnzeige.Text = "Rot"
ElseIf optFarbeGrün.Checked Then
lblAnzeige.Text = "Grün"
Else
lblAnzeige.Text = "Blau"
End If
End Sub
End ClassAbbildung 2.27 Mehrere Ereignisse in einer Prozedur
Zur Erläuterung:
- Die Prozedur optFarbeRot_CheckedChanged() wird durch alle drei CheckedChanged-Ereignisse aufgerufen: ... Handles optFarbeRot. CheckedChanged, optFarbeGrün.CheckedChanged, optFarbeBlau. CheckedChanged
2.5.4 Mehrere Gruppen von Optionsschaltflächen 

Falls im vorherigen Programm weitere Optionsschaltflächen hinzugefügt wurden, so gilt nach wie vor: Nur eine der Optionsschaltflächen ist ausgewählt.
Container
Benötigt man aber innerhalb eines Formulars mehrere voneinander unabhängige Gruppen von Optionsschaltflächen, wobei in jeder der Gruppen jeweils nur eine Optionsschaltfläche ausgewählt sein soll, so muss man jede Gruppe einzeln in einen Container setzen. Ein Formular ist bereits ein Container, wir benötigen also einen weiteren Container.
Group Box
Als ein solcher Container kann beispielsweise das Steuerelement Gruppe (GroupBox) dienen. Die Optionsschaltfläche, die zu einem (und damit auch in einen) Container gehören soll, muss zuerst erzeugt werden. Anschließend wird sie in die gewünschte GroupBox verschoben. Mit der Zuweisung der Eigenschaft Text der GroupBox gibt man eine Beschriftung an.
Abbildung 2.28 Gruppen von Optionsschaltflächen
Public Class frm0227
Dim AusgabeUrlaubsort As String
Dim AusgabeUnterkunft As String
Private Sub optBerlin_CheckedChanged( ... ) Handles _
optBerlin.CheckedChanged, _
optParis.CheckedChanged, _
optRom.CheckedChanged
' Urlaubsort
If optBerlin.Checked Then
AusgabeUrlaubsort = "Berlin"
ElseIf optParis.Checked Then
AusgabeUrlaubsort = "Paris"
Else
AusgabeUrlaubsort = "Rom"
End If
lblAnzeige.Text = AusgabeUrlaubsort _
& ", " & AusgabeUnterkunft
End Sub
Private Sub optAppartment_CheckedChanged( ... ) _
Handles optAppartment.CheckedChanged, _
optPension.CheckedChanged, _
optHotel.CheckedChanged
' Unterkunft
If optAppartment.Checked Then
AusgabeUnterkunft = "Appartment"
ElseIf optPension.Checked Then
AusgabeUnterkunft = "Pension"
Else
AusgabeUnterkunft = "Hotel"
End If
lblAnzeige.Text = AusgabeUrlaubsort _
& ", " & AusgabeUnterkunft
End Sub
End ClassZur Erläuterung:
- Bei einer Urlaubsbuchung können Zielort und Art der Unterkunft unabhängig voneinander gewählt werden. Es gibt also zwei Gruppen von Optionsschaltflächen, jede in einer eigenen GroupBox.
- Bei Auswahl einer der drei Optionsschaltflächen in einer Gruppe wird jeweils die gleiche Prozedur aufgerufen. In den Prozeduren wird der modulweiten Variablen AusgabeUrlaubsort bzw. AusgabeUnterkunft ein Wert zugewiesen. Anschließend werden die beiden Variablen ausgegeben.
- Die Variablen mussten modulweit deklariert werden, damit sie in der jeweils anderen Prozedur zur Verfügung stehen.
Übung p0228:
Erweitern Sie die Übung p0223. Die Bewegung des Krans soll per Zeitgeber (Timer) gesteuert werden. Der Benutzer wählt zunächst über eine Gruppe von Optionsschaltflächen aus, welche Bewegung der Kran ausführen soll. Anschließend betätigt er den Start-Button. Die Bewegung wird so lange ausgeführt, bis er den Stop-Button drückt oder eine Begrenzung erreicht wurde.
Abbildung 2.29 Übung p0228
2.5.5 Prozedur ohne Ereignis, Modularisierung 

Allgemeine Prozedur
Bisher wurden nur Prozeduren behandelt, die mit einem Ereignis zusammenhingen. Darüber hinaus kann man aber auch unabhängige, allgemeine Prozeduren schreiben, die von anderen Stellen des Programms aus aufgerufen werden. Diese Prozeduren können direkt im Codefenster eingegeben werden.
Nachfolgend eine geänderte Version des Programms p0227:
...
Private Sub optAppartment_CheckedChanged( ... ) _
Handles optAppartment.CheckedChanged, _
optPension.CheckedChanged, _
optHotel.CheckedChanged
' Unterkunft
If optAppartment.Checked Then
AusgabeUnterkunft = "Appartment"
ElseIf optPension.Checked Then
AusgabeUnterkunft = "Pension"
Else
AusgabeUnterkunft = "Hotel"
End If
Anzeigen()
End Sub
Private Sub Anzeigen()
lblAnzeige.Text = AusgabeUrlaubsort _
& ", " & AusgabeUnterkunft
End Sub
End ClassZur Erläuterung:
- Abgebildet wird nur der zweite Teil der Klasse.
- Am Ende der beiden Ereignisprozeduren optAppartment_Checked Changed() und optBerlin_CheckedChanged() steht jeweils die Anweisung Anzeigen(). Dabei handelt es sich um einen Aufruf der Prozedur Anzeigen().
- Diese Prozedur steht weiter unten. Sie ist nicht direkt an ein Ereignis gekoppelt.
Vorteil dieser Vorgehensweise: Gemeinsam genutzte Programmteile können ausgelagert werden und müssen nur einmal geschrieben werden. Man nennt diesen Vorgang bei der Programmierung auch Modularisierung. In Abschnitt 4.6, »Prozeduren und Funktionen«, wird dieses Thema noch genauer behandelt.



Jetzt online bestellen










