2012-07-05 71 views
0

我使用背景工人成功地顯示一個消息框,我的問題是,如果我儘量減少自己的狀態,當我的消息boxstill似乎是在窗體上單擊顯示消息框做了一些工作,當後臺工作完成miminized,除非我點擊消息框 - 我可以看到它在底部的任務欄,但其最小化?消息框不顯示窗體?

當用戶單擊任務欄中的表單時,是否可以使用表單顯示消息框?

目前我已經嘗試在使用消息框之前添加以下內容,但是該消息框仍顯示爲最小化。

me.activate 

更新

對不起,不添加編碼,我以爲這是基本的編碼它wouldnt重要,但在這裏它是....

Private Sub BGWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGWorker.DoWork 


      If Not worker.CancellationPending Then 

‘ Do code 

       If worker.CancellationPending Then 
        e.Cancel = True 
‘ Do Code 
        Exit Sub 
       End If 

      End If 


End Sub 


    Private Sub BGWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BGWorker.RunWorkerCompleted 
      Me.Activate() 
      If e.Cancelled Then 
Messagebox.show(「Cancelled」) 
      Else 
Messagebox.show(「Successful」) 

       End If 
    End Sub 

的問題是,如果我離開我的屏幕在其他屏幕的頂部,然後它的罰款消息框出現然而,如果它最小化如果我有其他窗口覆蓋窗體然後消息框保持最小化,除非我在任務欄上單擊它。

我以爲me.activate會幫助我,因爲消息框只會出現在窗體中。

+0

重現問題的郵政編碼。 – 2012-07-05 14:52:44

+0

的代碼片段是值得的解釋千言萬語... – 2012-07-05 15:46:54

+0

嗨,大家好,增加了我的編碼 – JackSparrow 2012-07-06 08:53:15

回答

2

我做了使用代碼中的測試項目,我能夠重現和解決問題。 Activate方法不會使表單最小化。要做到這一點,您需要設置WindowState屬性。試試這個:

Private Sub BGWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BGWorker.RunWorkerCompleted 
    Me.WindowState = FormWindowState.Normal ' Add this line 
    Me.Activate() 
    If e.Cancelled Then 
     Messagebox.show(「Cancelled」) 
    Else 
     Messagebox.show(「Successful」) 

    End If 
End Sub 
+0

您好史蒂夫,是消息框出現在BGWorker運行工Completeted事件。但是我認爲這個調用只在do work事件中需要? – JackSparrow 2012-07-05 15:37:12

+2

@JackSparrow是的,你是對的。如果你從'RunWorkerCompleted'事件顯示它,那麼你不需要調用'Invoke'。 RunWorkerCompleted事件是從UI線程引發的。正如漢斯所說,如果您可以發佈一些代碼來重現問題,那麼這將會很有幫助。 – 2012-07-05 15:42:58

+0

嗨史蒂夫,我會編輯我的第一篇文章,包括我有的編碼。 – JackSparrow 2012-07-06 08:46:31