2009-11-11 5 views
2

일정 기간 동안 맨 위에 있어야하는 양식이 있고 다른 창 뒤에 정상적으로 설정할 수 있습니다. 수행해야 할 Me.TopMost ~ True 또는 False을 설정하는 것 외에 어떤 것이 있습니까? 작동하지 않는 것 같아서 묻습니다.VB.NET에서 TopMost 토글

+0

이 작동하지이 나타 납니까? –

답변

4

문제가 없어야합니다. 다음 코드 (C#, 죄송합니다. 지금은 VB.NET 환경이 없습니다)는 TopMosttrue으로 설정하고 5 초 동안 기다린 다음 TopMostfalse으로 다시 전환합니다.

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

이것은 창의 Z 순서에 즉시 영향을주지 않습니다. TopMostfalse으로 설정하면 창은 다른 창 위에 계속 표시됩니다. 창이 최상위에있는 다른 창 위에 있으면 가장 위쪽에있는 다른 창을 덮지 않고 다른 최상위 창이 아닌 창 위로 계속 이동합니다.

업데이트 여기
는 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

+0

@ShawN : 적어도 맨 위가 아닌 창 앞에 이동해야합니다. 나는 그것이 다른 최상위 창들 앞에서 자동으로 움직일 것이라고 추측하지는 않는다. 만약 당신이 그것을 강요하고 싶다면'Me.BringToFront()'를 부를 수있다. –

+1

@Shawn : 빠른 테스트를했는데,'TopMost = True'를 설정하면 창문이 앞쪽으로 움직이게되고, 이미 맨 위에있는 다른 창들 앞쪽으로 움직이게됩니다. false로 설정하면 맨 위의 창을 덮지 않을만큼 충분히 뒤로 이동하는 것처럼 보입니다. –