2013-09-25 89 views
1

我,每次顯示一個消息框,說一個計時器「你好。」我還配置了代碼,以便在窗口失去焦點時,它應該停止保持框到來的計時器。但是,他們繼續來。爲什麼MsgBox不會觸發一個丟失的焦點事件VB.net?

我已經嘗試了類似的事情,在一個類似的方案有太長的代碼張貼在這裏,但什麼所做的就是它暫停第一次,停止計時,當計時器再次停止,它沒有正常工作。還有一些其他的代碼那裏有一個隨機元素,產生了一定數值時,顯示不同的提示,但一旦產生,它使用相同的不同的提示,每次保存。

這是沒有足夠的時間,錯誤處理所有的代碼,併爲「重疊」一些?我可以延遲計時器沒有那麼多不同的影響,但我認爲它正在運行該程序,與1.6 GHz的,它可以處理一個計時器一些消息框,我的[低端] CPU。雖然,VS正在同時運行,但我不應該每次都需要導出我的代碼並關閉VS,以便測試它。

如果問題沒有足夠的時間,是沒有辦法,我可以防止「多線程」或不管它是當仁不讓的程序的方法嗎?這似乎是一個奇怪的問題,但電腦也很奇怪。 :P

編輯:

通過「焦點訪談」我指的是選定的窗口,這是最明顯的。例如,我的瀏覽器現在是「專注」的。我被告知正確的術語是「被選中的」。我一定是使用了錯誤類型事件觸發的...:P

+1

你試過Form.Deactivate嗎?它發生在表單失去焦點並且不再是活動形式時。「 – Plutonix

回答

2

創建一個新的項目TimerTimer1)和編寫代碼:

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick 

    If (Me.Focused) Then 
     MessageBox.Show("Hello") 
    End If 

End Sub 

如果你把鼠標放在你的形式,您會看到在給定的Interval結束後會彈出一個消息框。如果你不接受按鈕點擊並按住鼠標在窗體上,你會看到沒有進一步的消息顯示:Me.FocusFalse。如果你點擊接受按鈕,消息就會開始彈出;你甚至不需要選擇表單(焦點從MessageBox自動轉移到Form)。

總結:MessageBox確實讓Form失去焦點,雖然它是一種的「貓膩」據就會自動點擊接受按鈕後回丟失。

UPDATE:建議配置不會觸發LostFocus事件的形式爲:

Private Sub Form1_LostFocus(sender As Object, e As System.EventArgs) Handles Me.LostFocus 
    MsgBox("lost") 
End Sub 

不大可能其他答案/評論,我從你的問題理解的是,你想知道的原因,如果這是一個正常的行爲,而不是得到一個工作解決方案,使表單失去焦點(你甚至沒有描述你想要發生的確切條件)。

+0

因此失去了對鼠標的重點嗎?我更多地指的是Windows使聚焦窗口更明顯的方式。 –

+0

@AnnonomusPerson總是有一個「選定」窗口/控件,這是一個焦點。它根據性質/條件以不同方式突出顯示。你想要什麼? – varocarbas

+0

我應該讓這個更清楚。我想知道表格何時失去「選擇」。我一定是使用了錯誤的財產。我的意思是,這是一個更明顯的看窗口:通常只有一個顏色更鮮豔。 –

4

它不會生成失去焦點的事件,因爲表單首先沒有焦點。表單上的控件始終獲得焦點,如Button或TextBox。您可以改用Deactivate事件。

或者當Tick事件再次觸發時不顯示消息框。粗略地:

Private ShowingMsgBox As Boolean 

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    '' Do stuff 
    '' 
    If Not ShowingMsgBox Then 
     ShowingMsgBox = True 
     MsgBox("yada") 
     ShowingMsgBox = False 
    End If 
End Sub 

此行爲的潛在原因是MsgBox泵送一個消息循環。它保持正常的Windows消息傳遞,如WM_PAINT,保持窗口畫。和WM_TIMER,生成Tick事件的那個。它阻止的唯一消息是輸入事件,鼠標和鍵盤消息。否則,Application.DoEvents()非常危險。它和MsgBox()一樣,沒有禁用輸入。

+0

我不確定我是否是唯一一個誤解你的陳述,但似乎你說這個形式永遠不會成爲焦點。這種觸發FormBox上的MessageBox失焦的方法不是非常可靠,但理論上它不應該有任何問題。因爲OP不希望表單失去焦點,而只是爲了理解MessageBox是否不觸發此事件。 – varocarbas

+0

是的,這就是我要說的。重點和激活並不是一回事。如果窗體具有可以接收焦點的任何控件,則表單的聚焦屬性將永遠不會爲真。您的答案中的代碼無法工作。不要編譯,只需自己嘗試。 –

+0

你爲什麼這麼說?我測試了它(我測試了我在這裏發佈的所有代碼)。由於MsgBox?我正在做一些實驗,但它工作正常(至少有Option Strict Off)。我創建了一個空白表單,並且兩個MessageBox都被觸發了,沒有任何問題。 – varocarbas

相關問題