vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
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:     [ Jetzt bewerten ]Views:  22.234 
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
 

Dieser Tipp wurde bereits 22.234 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel