2010-02-15 77 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調用:

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

我只是用這個:

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

這使得窗口頂層(即它沒有父和行爲作爲應用程序的主要形式),然後確保它是最頂層的(即,顯示在所有其他非最頂層窗口之上)。它一直像魅力一樣工作。

請注意,在顯示窗口之前,我會這樣做。

0

工程100%!

User32.AllowSetForegroundWindow((uint)Process.GetCurrentProcess().Id); 
User32.SetForegroundWindow(Handle); 
User32.ShowWindow(Handle, User32.SW_SHOWNORMAL); 
相關問題