2009-11-11 93 views
2

我有一個窗體必須在一段時間內處於頂部,然後才能正常設置在其他窗口的後面。除了將Me.TopMost設置爲TrueFalse還有什麼需要完成的嗎?我問,因爲它似乎沒有工作。在VB.NET中切換TopMost

+0

以何種方式它似乎不工作? – 2009-11-11 15:39:45

回答

4

它應該沒有問題。下面的代碼(C#,對不起,沒有VB.NET環境可用,我現在正在使用)將TopMost設置爲true,等待5秒鐘,然後將TopMost切換回false

private void MakeMeTopmostForAWhile() 
{ 
    this.TopMost = true; 
    ThreadPool.QueueUserWorkItem(state => 
    { 
     Thread.Sleep(5000); 
     this.Invoke((Action)delegate { this.TopMost = false; }); 
    }); 
} 

請注意,這不會立即影響窗口的Z順序;當TopMost設置爲false時,窗口仍然位於其他窗口之上。如果窗口位於另一個也是最頂層的窗口的頂部,它將移動,以便不覆蓋另一個最頂層的窗口,但它將保持在其他非最頂層窗口之上。

更新
這裏是VB.NET上面的代碼(auto-converted,未測試):

Private Sub MakeMeTopmostForAWhile() 
    Me.TopMost = True 
    ThreadPool.QueueUserWorkItem(Function(state) Do 
        Thread.Sleep(5000) 
        Me.Invoke(DirectCast(Function() Do 
            Me.TopMost = False 
        End Function, Action)) 
    End Function) 
End Sub 
+0

將TopMost設置爲true時是否會立即影響Z順序?意味着它應該直接進入頂端? – Shawn 2009-11-11 16:08:26

+0

@ShawN:它應該至少移動到任何非最頂層窗口的前面。我不會猜測它會自動移動到其他最頂層窗口的前面。如果你想強制你可以調用'Me.BringToFront()'。 – 2009-11-11 16:10:46

+1

@Shawn:我做了一個快速測試,看起來好像設置「TopMost = True」強制窗口在前面,也在其他已經是最頂層的窗口之前。將它設置爲false似乎將其移回到不足以覆蓋任何最頂層的窗口。 – 2009-11-11 16:15:16