根據微軟: 「在Visual Basic 6.0中,當CheckBox狀態以編程方式更改時引發Click事件。」 這正是我不想要的。Click and CheckStateChanged VB6
我想單擊事件只會在點擊複選框而不是狀態發生變化時引發。
任何想法如何做到這一點?
謝謝
根據微軟: 「在Visual Basic 6.0中,當CheckBox狀態以編程方式更改時引發Click事件。」 這正是我不想要的。Click and CheckStateChanged VB6
我想單擊事件只會在點擊複選框而不是狀態發生變化時引發。
任何想法如何做到這一點?
謝謝
將您的Click
事件代碼改爲MouseDown
事件。你必須手動設置雖然checkstate:
Private Sub Check1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Check1.Value = IIf(Check1.Value = vbChecked, vbUnchecked, vbChecked)
' run other necessary code here
End Sub
不知道這是最好的方式,但一個方法是有一個變量,名爲像IgnoreEvents,並設置爲true權變更前的狀態編程。 然後在事件處理程序中,如果該變量爲true,則只需退出事件處理程序而不做任何事情。
當您從代碼填充表單以忽略更改時,您可以設置標誌。如果代碼組織不好,這可能會變得混亂。
表單級別:
Public IgnoreChange As Boolean
窗體的Load:
IgnoreChange = False
事件:
If IgnoreChange Then Exit Sub
您的代碼:
frmReference.IgnoreChange = True
frmReference.Checkbox1.Checked = True
frmReference.IgnoreChange = False
代碼只應迴應用戶操作
我已經寫了一個小程序運行時,用戶點擊該複選框,我需要在這裏添加話要說,只有運行時用戶點擊,而不是當語法改變。 因爲在這個應用程序中找到所有改變狀態的地方几乎是不可能的 – User1162527
@ user1162527不幸的是,你可能不得不重構應用程序來做到這一點。也許可以創建一個'ClickButton'方法來發送實際點擊並更改所有其他代碼來調用該方法,而不是在任何地方發送實際點擊,這樣至少可以讓它更容易一點。 –