2010-02-15 2 views
2

최상위 속성은 때로는 내 응용 프로그램을 다른 모든 응용 프로그램보다 우선시하는 것으로 보입니다. 그러나 테스트를 통해 때때로 작동하고 창이 다른 모든 (외부 응용 프로그램) 창 위에 유지된다는 점에서 매우 이상합니다. 때로는 아무것도하지 않습니다. WS_EX_TOPMOST 플래그를 사용하여 setWindowLong()에 Win32 API 호출을 설정하여 플래그를 사용해 보았습니다. 그들 중 누구도 창문을 맨 위에 두지 않습니다. 최상위 창을 사용하는 것 외에 열려있는 창의 맨 위에 창을 유지할 수있는 또 다른 방법이 있습니까? 아니면 제가 알아야 할 다른 것이 있습니까?Form.TopMost가 때때로 작동합니다

답변

1

Form.TopMost 외에도 Win32 API SetForegroundWindow을 사용해 볼 수 있습니다.

[return: MarshalAs(UnmanagedType.Bool)] 
[DllImport("user32", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)] 
public static extern bool SetForegroundWindow(IntPtr hwnd); 

그런 다음 SetForegroundWindow(this.Handle)으로 전화하십시오.

2

나는 다음는 Win32 API 호출과 행운을 했어 : 윈도우 최상위하게

form.TopLevel = true; 
form.TopMost = true; 

은 (는 부모가없고, 즉 동작 :

const int SW_SHOW = 5; 
BringWindowToTop(form.Handle); 
ShowWindow(form.Handle, SW_SHOW); 
5

단순히 이것을 사용 응용 프로그램의 주요 형태로), 최상위 (즉, 최상위가 아닌 다른 모든 창 위에 표시)를 보장합니다. 그것은 항상 매력처럼 일했습니다.

창을 표시하기 전에이 작업을 수행합니다.

0

작동 100 %!

User32.AllowSetForegroundWindow((uint)Process.GetCurrentProcess().Id); 
User32.SetForegroundWindow(Handle); 
User32.ShowWindow(Handle, User32.SW_SHOWNORMAL); 
관련 문제