2013-10-17 57 views
0
Private Sub OpTest_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles OpArhein.CheckedChanged 
    configSave() 
    MsgBox("OpTest changed.") 

End Sub 

CheckBox設置爲以選中狀態啓動。當我開始調試這個運行並且這個MsgBox彈出時,但是configSave()中的MsgBox不會。 configSave()在此之前定義。VB 2010:關於_CheckedChanged

在調試時,如果我取消選中或檢查複選框,那麼兩個MsgBox都很好。

這是爲什麼在啓動時運行? 我應該如何着手阻止它在啓動時運行? 我計劃擁有48個CheckBoxes,讓它在啓動時運行48次似乎是非常不必要的。你可能會說,我對此非常陌生。所以謝謝你的幫助。

+0

您是否在form_load期間更改了此控件的屬性值? – Steve

+0

我以前遇到類似的問題,實際上最終處理'Checked'事件。 –

回答

2
Private Sub OpTest_CheckedChanged(sender As System.Object, e As System.EventArgs) _ 
    Handles OpArhein.CheckedChanged 

這是一個VB.NET特有的怪癖,它不會發生在C#項目中。這是由代碼中的處理關鍵字引起的。它導致事件過早訂閱。事件處理程序在複選框由窗體構造函數初始化時運行。太早了。

解決方法是稍後訂閱。刪除Handles OpArhein.CheckChanged子句並向表單添加構造函數。使它看起來像這樣:

Public Sub New() 
    InitializeComponent() 
    AddHandler OpArhein.CheckedChanged, AddressOf OpTest_CheckedChanged 
End Sub 

AddHandler語句與Handles關鍵字執行相同的操作,但顯式執行它。並讓你確定事件得到訂閱。在InitializeComponent()調用之後執行它可以解決您的問題。

+0

現在這很有趣!難怪我無法用C#代碼重現它:) – BartoszKP