vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · Sonstiges   |   VB-Versionen: VB4, VB5, VB616.09.03
CheckBox-Status setzen ohne Click-Ereignis

Diesmal zeigen wir Ihnen eine Möglichkeit, wie sich der Status einer CheckBox per VB-Code setzen lässt, ohne dass das Click-Ereignis ausgelöst wird.

Autor:   Dieter OtterBewertung:  Views:  22.261 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

In unserem heutigen Tipp zeigen wir eine Möglichkeit auf, wie sich der Status einer CheckBox per VB-Code setzen lässt, ohne dass das Click-Ereignis ausgelöst wird.

Folgene Überlegung: Das Klick-Ereignis soll nur dann ausgelöst werden, wenn:

  • der Anwender mit der Maus auf die CheckBox klickt
  • oder die Leertaste drückt, wenn die CheckBox das aktive Control ist

Variante 1:
Wir fragen im Click-Event über die ActiveControl-Eigenschaft ab, ob die CheckBox den Fokus hat. In aller Regel hat dann der Anwender den Status geändert.

Private Sub Check1_Click()
  If Me.ActiveControl Is Check1 Then
    MsgBox "Klick durch den Anwender!"
  Else
    MsgBox "Status-Änderung per VB-Code"
  End If
End If

Jetzt könnte es aber vorkommen, dass die CheckBox den Fokus hat und der Status z.B. über ein Timer-Control gesetzt wurde oder der Status der CheckBox aus einer 2. Form heraus geändert wird.

Variante 2:
Wir verwenden eine globale Variable, die in einem Modul deklariert wird:

Public bCheckNoEvent As Boolean
Wird der Status der CheckBox nun innerhalb des VB-Code verändert, setzen wir die globale Variable auf TRUE. Im Click-Ereignis fragen wir die Variabel ab und setzen Sie anschließend wieder auf FALSE.

' CheckBox-Status per Code setzen
bCheckNoEvent = True: Check1.Value = 1
Private Sub Check1_Click()
  If Not bNoCheckEvent Then
    MsgBox "Klick durch den Anwender!"
  Else
    MsgBox "Status-Änderung per VB-Code"
  End If
End If

So... das funktioniert ganz gut. Es gibt aber noch eine dritte Möglichkeit. Jedesmal, wenn wir den Status der CheckBox aus dem Code heraus verändern wollen, rufen wir eine Extra-Prozedur auf:

Variante 3:
Im Click-Ereignis der CheckBox wird wieder die ActiveControl-Eigenschaft abgefragt. Beim Ändern des CheckBox-Status per VB-Code müssen wir jetzt nur sicherstellen, dass die CheckBox zu diesem Zeitpunkt nicht den Fokus beseitzt.

' CheckBox-Status per Code setzen
SetCheckBoxValue Me, Check1, vbChecked

Nachfolgende Prozedur am besten wieder in ein Modul packen:

Public Sub SetCheckBoxValue(oForm As Form, _
  oCheck As CheckBox, _
  ByVal nValue As VBRUN.CheckBoxConstants, _
  Optional ByVal bRaiseEvent As Boolean = False)
 
  ' CheckBox-Status per VB-Code sezten,
  ' ohne das Click-Ereignis auszulösen
 
  Dim oControl As Control
 
  ' aktives Control auf der Form
  Set oControl = oForm.ActiveControl
 
  ' Falls CheckBox das aktive Control...
  If oControl Is oCheck Then
    ' ... mal eben schnell disablen
    oCheck.Enabled = False
 
    ' Status setzen
    oCheck.Value = nValue
 
    ' wieder enablen und Fokus setzen
    oCheck.Enabled = True
    On Error Resume Next
    oCheck.SetFocus
    On Error GoTo 0
  Else
    ' Status setzen
    oCheck.Value = nValue
  End If
End Sub
Private Sub Check1_Click()
  If Me.ActiveControl Is Check1 Then
    MsgBox "Klick durch den Anwender!"
  Else
    MsgBox "Status-Änderung per VB-Code"
  End If
End If

So... und nun suchen Sie sich die für Ihre Bedürfnisse am geeigneteste Variante aus
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.