2011-09-22 98 views
1

我想根據當前激活的窗體更新數據庫。我最初決定使用GotFocus事件。不過,我現在明白,由於表單有控制權,因此無法工作。所以我認爲我會使用激活的事件。這工作,但似乎多次啓動。我把下面的代碼:vb.net多次激活火災

Private Sub frmNewTicket_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated 
    MsgBox("Form Activated") 
End Sub 

我選擇的形式,使之激活,消息框出現約15倍。

它爲什麼這樣做?我應該如何處理這個問題。我只希望我的代碼在表單激活時執行一次。

注意:有幾種形式,用戶將會改變,包括其他應用程序的形式。

+0

從您的問題中我發現,您希望爲活動窗體執行一次「某事」?也許事件LOAD或FORMCLOSING是你正在尋找的。加載在第一次顯示錶單之前執行,用戶尚不可見。 FormClosing在用戶(或代碼)決定關閉窗口時執行,仍然可見。 – Martin

回答

3

每次單擊消息框上的OK時,表單都會重新獲得焦點並重新激活。

把你frmNewTicket_Activated像有人張貼here靜態Boolean值:

Static HasRan As Boolean=False 
If Not HasRan Then 
    HasRan=True 
    'put code here 
End If 
+0

嗨,感謝您的回覆。我嘗試過,但這沒有什麼區別。老實說,我不明白爲什麼要這樣做。每次事件觸發時,HasRan將被設置爲False,因此在代碼中進一步測試時將會是錯誤的。 如果我將HasRan的聲明移到其他地方,那麼它只會觸發一次而已。 我想我必須錯過那裏,因爲我不明白它會如何工作。 但無論如何你已經幫助解決了這個問題。我正在使用msgbox來測試它是否正在觸發。我已經刪除了消息框,並且按照需要工作。 謝謝 – Stephen

+0

@Stephen當您爲靜態變量賦予一個初始值時,它只會在第一次運行'_Activated'方法時分配,而不是每次都分配一次。我很高興你能按照你的要求工作。要以這種方式工作可能需要稍微調整一下,因爲激活表單後發生的情況很重要。 – jonsca

+0

@AndreSilva感謝您的領導! – jonsca

1

這聽起來像你想要做一些事情,每次表單被激活。 FormActivated事件將正常工作,只要您正在做的事情不會將焦點從Form中拉出,然後當表單再次獲得焦點時觸發另一個Activation事件。嘗試使用MessageBox以外的其他方式進行測試,如Beep或更改表格的顏色