Optionsgruppe leeren mit Klasse

Optionsgruppen sind praktische Steuerelemente für die Auswahl einiger weniger, vorab fest definierter Optionen. Leider bietet dieses Steuerelement nach einmaliger Auswahl nicht mehr die Möglichkeit, dieses wieder zu leeren. Im vorliegenden Beitrag schauen wir uns an, wie das grundsätzlich zu erledigen ist. Außerdem erstellen wir eine Klasse, mit der Sie den dazu benötigten Code für die Nutzung in mehreren Optionsgruppen wiederverwenden können, statt ihn jedes Mal zu reproduzieren.

Vorbereitung

Für die Beispiele in diesem Beitrag legen wir ein Formular mit einer Optionsgruppe namens ogr-Optionen an. Dieser fügen wir drei Optionen hinzu, deren Wert für die Eigenschaft Optionswert wir auf 1, 2 und 3 festlegen und die wir opt1, opt2 und opt3 benennen. Der Entwurf dieses Formulars sieht wie in Bild 1 aus.

Entwurf des Formulars mit der Optionsgruppe

Bild 1: Entwurf des Formulars mit der Optionsgruppe

Dieses Formular kopieren wir direkt einmal, und zwar unter dem Namen frmOptionenMitKlasse. Wir schauen uns also zuerst an, wie wir das Leeren der Optionsgruppe direkt im Klassenmodul des Formulars erledigen.

Danach programmieren wir Klassen, mit denen wir das Verhalten abbilden und wiederverwendbar machen, und wenden diese in der Kopie des Formulars an.

Gewünschtes Verhalten

Wir wollen erreichen, dass der Benutzer sowohl mit der Maus als auch mit der Tastatur eine einmal getätigte Auswahl in der Optionsgruppe wieder rückgängig machen kann.

Dazu untersuchen wir zwei Ereignisse: das Loslassen der linken Maustaste sowie das Betätigen der Leertaste. Hier prüfen wir jeweils, ob die aktuelle Option gerade aktiviert ist, und nur in diesem Fall soll die Optionsgruppe geleert werden.

Ereignisse zum Abbilden des Verhaltens

Dazu nutzen wir zwei Ereignisse der jeweiligen Optionsfelder, nämlich Bei Maustaste auf und Bei Taste auf. Diese legen wir für alle vorhandenen Optionsfelder an. Für das erste Optionsfeld sieht das im ersten Schritt dann wie folgt aus:

Private Sub opt1_MouseUp(Button As Integer,  Shift As Integer, X As Single, Y As Single)
End Sub
Private Sub opt1_KeyUp(KeyCode As Integer,  Shift As Integer)
End Sub

Hier brauchen wir nun Action. Für das Loslassen des Mauszeigers sieht das wie folgt aus:

  • Prüfen, ob die linke Maustaste gedrückt wurde
  • Prüfen, ob die Maus vor dem Loslassen die aktuell selektierte Option angeklickt hat
  • Dann die Optionsgruppe leeren

Für das Ereignis Bei Taste auf stehen folgende Aufgaben an:

  • Prüfen, ob die Leertaste gedrückt wurde
  • Prüfen, ob beim Betätigen der Leertaste der Fokus auf der aktuell selektierten Option liegt
  • Dann die Optionsgruppe leeren

Individueller Code für diese Optionsgruppe

Die Lösung für die eingangs beschriebene Optionsgruppe finden Sie in Listing 1. Wir kümmern uns zunächst um die Maus-ereignisse. Dazu schauen wir uns den Code für das Ereignis opt1_MouseUp an. Die Prozedur vergleicht zunächst den Wert des Parameters Button mit dem Wert der Konstanten acLeftButton und prüft damit, ob der Benutzer überhaupt die linke Maustaste gedrückt hat.

Private Sub opt1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
     If Button = acLeftButton Then
         UpdateOptiongroup Me!ogrOptionen, Me!opt1
     End If
End Sub
Private Sub opt2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
     If Button = acLeftButton Then
         UpdateOptiongroup Me!ogrOptionen, Me!opt2
     End If
End Sub
Private Sub opt3_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
     If Button = acLeftButton Then
         UpdateOptiongroup Me!ogrOptionen, Me!opt3
     End If
End Sub
Private Sub opt1_KeyUp(KeyCode As Integer, Shift As Integer)
      Select Case KeyCode
          Case vbKeySpace
              UpdateOptiongroup Me!ogrOptionen, Me!opt1
      End Select
End Sub
Private Sub opt2_KeyUp(KeyCode As Integer, Shift As Integer)
      Select Case KeyCode
          Case vbKeySpace
              UpdateOptiongroup Me!ogrOptionen, Me!opt2
      End Select
End Sub
Private Sub opt3_KeyUp(KeyCode As Integer, Shift As Integer)
      Select Case KeyCode
          Case vbKeySpace
              UpdateOptiongroup Me!ogrOptionen, Me!opt2
      End Select
End Sub
Private Sub UpdateOptiongroup(ogr As OptionGroup, opt As OptionButton)
      If ogr = opt.OptionValue Then
          ogr = Null
      End If
End Sub

Listing 1: Prozeduren, um die aktuelle Option wieder abzuwählen

Ist das der Fall, ruft die Ereignisprozedur eine weitere Prozedur namens UpdateOptiongroup auf und übergibt dieser als Parameter einen Verweis auf die Optionsgruppe sowie auf das angeklickte Optionsfeld. Diese Prozedur prüft, ob der Wert der Optionsgruppe (aus dem Parameter ogr) mit dem Wert des Optionsfeldes (aus dem Parameter opt) übereinstimmt. In diesem Fall stellt sie den Wert der Optionsgruppe aus dem Parameter ogr auf Null ein.

Auf die gleiche Weise programmieren wir die Prozeduren für das Ereignis Bei Maustaste auf der anderen Optionsfelder. Die Prozeduren opt1_KeyUp, opt2_KeyUp und opt3_KeyUp werden beim Betätigen von Tasten ausgelöst. Hier prüfen wir, welche Taste der Benutzer gedrückt hat, denn das Ereignis wird beim Betätigen jeder Taste ausgelöst. Also vergleichen wir den Wert des Parameters KeyCode mit der Konstanten für die Leertaste, vbKeySpace. Sind die beiden gleich, rufen wir wieder die bereits beschriebene Prozedur UpdateOptiongroup auf und übergeben die entsprechenden Parameter.

Optionsgruppe leeren wiederverwendbar machen

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar