2013-10-02 57 views
3

根據微軟: 「在Visual Basic 6.0中,當CheckBox狀態以編程方式更改時引發Click事件。」 這正是我不想要的。Click and CheckStateChanged VB6

我想單擊事件只會在點擊複選框而不是狀態發生變化時引發。

任何想法如何做到這一點?

謝謝

回答

2

將您的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 
3

不知道這是最好的方式,但一個方法是有一個變量,名爲像IgnoreEvents,並設置爲true權變更前的狀態編程。 然後在事件處理程序中,如果該變量爲true,則只需退出事件處理程序而不做任何事情。

+0

我已經寫了一個小程序運行時,用戶點擊該複選框,我需要在這裏添加話要說,只有運行時用戶點擊,而不是當語法改變。 因爲在這個應用程序中找到所有改變狀態的地方几乎是不可能的 – User1162527

+0

@ user1162527不幸的是,你可能不得不重構應用程序來做到這一點。也許可以創建一個'ClickButton'方法來發送實際點擊並更改所有其他代碼來調用該方法,而不是在任何地方發送實際點擊,這樣至少可以讓它更容易一點。 –

4

當您從代碼填充表單以忽略更改時,您可以設置標誌。如果代碼組織不好,這可能會變得混亂。

表單級別:

Public IgnoreChange As Boolean 

窗體的Load:

IgnoreChange = False 

事件:

If IgnoreChange Then Exit Sub 

您的代碼:

frmReference.IgnoreChange = True 
    frmReference.Checkbox1.Checked = True 
    frmReference.IgnoreChange = False 

代碼只應迴應用戶操作