2009-11-11 24 views
2

J'ai un formulaire qui doit être en haut pendant un certain temps, puis peut être placé derrière d'autres fenêtres normalement. Y a-t-il quelque chose en plus à régler Me.TopMost à True ou False qui doit être fait? Je demande parce que ça ne semble pas fonctionner.Toggling TopMost dans VB.NET

+0

De quelle façon il semble ne pas fonctionner? –

Répondre

4

Il ne devrait pas présenter de problème. Le code suivant (C#, désolé pour cela, aucun environnement VB.NET disponible où je suis maintenant) définit TopMost à true, attend 5 secondes, puis bascule TopMost Retour à false.

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

Notez que cela n'affecte pas immédiatement l'ordre Z de la fenêtre; Lorsque TopMost est défini sur false, la fenêtre sera toujours au-dessus des autres fenêtres. Si la fenêtre est au-dessus d'une autre fenêtre qui est aussi la plus haute, elle se déplacera pour que l'autre fenêtre la plus haute ne soit pas couverte, mais elle restera au-dessus des autres fenêtres non supérieures.

Mise à jour
Voici le code ci-dessus dans VB.NET (auto-converted, non testé):

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

Lorsque vous définissez TopMost sur true, cela affecte-t-il immédiatement l'ordre Z? Sens devrait-il aller directement au sommet? – Shawn

+0

@ShawN: il devrait au moins se déplacer devant toute fenêtre non-topmost. Je ne devinerais pas qu'il se déplacerait automatiquement devant les autres fenêtres les plus hautes. Si vous voulez forcer cela, vous pouvez appeler 'Me.BringToFront()'. –

+1

@Shawn: J'ai fait un test rapide et il semble que si vous définissez 'TopMost = True' force la fenêtre vers l'avant, également devant les autres fenêtres qui sont déjà les plus hautes. Le placer à faux semble le déplacer assez pour ne pas couvrir les fenêtres les plus en haut. –