I have a form that has to be on top for a period of time, and then can be set behind other windows normally. Is there anything in addition to setting Me.TopMost
to True
or False
that needs to be done? I ask because it doesn't seem to be working.
views:
505answers:
1
+1
A:
It should present no problem. The following code (C#, sorry for that, no VB.NET environment available where I am right now) sets TopMost
to true
, waits for 5 seconds and then toggles TopMost
back to false
.
private void MakeMeTopmostForAWhile()
{
this.TopMost = true;
ThreadPool.QueueUserWorkItem(state =>
{
Thread.Sleep(5000);
this.Invoke((Action)delegate { this.TopMost = false; });
});
}
Note that this does not affect the Z-order of the window immediately; when TopMost
is set to false
, the window will still be on top of other windows. If the window is on top of another window that is also topmost, it will move so that the other topmost window is not covered, but it will remain on top of other non-topmost windows.
Update
Here is the above code in VB.NET (auto-converted, not tested):
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
Fredrik Mörk
2009-11-11 15:47:15
When setting TopMost to true does it immediately affect the Z-order? Meaning should it go straight to the top?
Shawn
2009-11-11 16:08:26
@ShawN: it should at least move in front of any non-topmost windows. I would not guess that it would automatically move in front of other topmost windows. If you want to force that you could call `Me.BringToFront()`.
Fredrik Mörk
2009-11-11 16:10:46
@Shawn: I did a quick test and it appears as if setting `TopMost = True` forces the window to the front, also in front of other windows that are already topmost. Setting it to false seems to move it back enough to not cover any topmost windows.
Fredrik Mörk
2009-11-11 16:15:16