2017-09-20 13 views
0

任何人都可以幫助避免這種情況嗎?如果致電表格發生兩次事件

在一個事件處理程序中,我需要調用一個表單,但在表單被卸載後,該事件再次被激發。

Private Sub MyHandler(sender As System.Object, e As System.EventArgs) Handles txObjName.Leave 

     Dim MyVar As Integer = SomeValue 

     dim myForm as SomeForm 
     MyForm.ShowDialog() 

myForm會被關閉後,事件再次

+0

這是'Sub MyHandler'中的所有代碼嗎?我問,因爲,'MyForm.ShowDialog()'後面的所有內容在'MyForm'被關閉之前不會被執行。 – MatSnow

+0

不,還有更多的代碼,這只是一個示例。表單被調用(並關閉)後,所有的代碼再次執行... – GCoe

+0

你是否使用'AddHandler'在別的地方設置了處理程序? – MatSnow

回答

0

解僱一個快速的想法是儘量利用FormClosing事件。

所以,你的代碼看起來就像這樣:

Private _Closing as boolean = False 
Private Sub MyHandler(sender As System.Object, e As System.EventArgs) Handles txObjName.Leave 
    If Not _Closing Then 
     Dim MyVar As Integer = SomeValue 
     Dim myForm as SomeForm 
     MyForm.ShowDialog() 
    End If 
End Sub 

Private Sub FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing 
    _Closing = True 
End Sub 

你利用FormClosing事件的切換布爾_Closing爲真,所以當窗體關閉代碼將不會執行:)

+0

這是一種解決方法,而不是解決方案,它只適用於Sub MyHandler與' SomeForm'。從這個問題來看,這是不是很清楚。 – MatSnow

+0

嗨Jaxi,事件被解僱後,MyForm被關閉,而不是主窗體... – GCoe

+0

而不是MyBase.FormClosing你可以使用'AddHandler',而不是? – Jaxi

0

解決變化:

Handles txObjName.Leave 

通過

Handles txObjName.LostFocus 

謝謝大家