C# 最上面的表格有时有效

C# 最上面的表格有时有效,c#,winforms,winapi,C#,Winforms,Winapi,看起来,最顶层的属性有时会将我的应用程序置于所有其他窗口之上,但在整个测试过程中,它一直非常奇怪,因为有时它可以工作,而窗口仍然位于所有其他(外部应用程序)窗口之上,但有时它什么都不做。我甚至尝试使用WS_EX_TOPMOST标志,将其与Win32 API调用setWindowLong()一起设置。他们都没有把窗户放在上面。除了使用顶部外,还有没有其他方法可以在每个打开的窗口顶部保留一个窗口?或者关于topmost还有什么我应该知道的吗?除了表单。topmost你可以试试Win32 API 然后

看起来,最顶层的属性有时会将我的应用程序置于所有其他窗口之上,但在整个测试过程中,它一直非常奇怪,因为有时它可以工作,而窗口仍然位于所有其他(外部应用程序)窗口之上,但有时它什么都不做。我甚至尝试使用WS_EX_TOPMOST标志,将其与Win32 API调用setWindowLong()一起设置。他们都没有把窗户放在上面。除了使用顶部外,还有没有其他方法可以在每个打开的窗口顶部保留一个窗口?或者关于topmost还有什么我应该知道的吗?

除了
表单。topmost
你可以试试Win32 API


然后调用
setforegroundindow(this.Handle)

我很幸运地完成了以下win32 api调用:

const int SW_SHOW = 5;
BringWindowToTop(form.Handle);
ShowWindow(form.Handle, SW_SHOW);
我只是用这个:

form.TopLevel = true;
form.TopMost  = true;
这使窗口成为顶级窗口(即,它没有父窗口,并且作为应用程序的主要形式),然后确保它是最顶层窗口(即,显示在所有其他非最顶层窗口之上)。它一直像一种魅力

请注意,我在显示窗口之前执行此操作。

100%有效

User32.AllowSetForegroundWindow((uint)Process.GetCurrentProcess().Id);
User32.SetForegroundWindow(Handle);
User32.ShowWindow(Handle, User32.SW_SHOWNORMAL);
User32.AllowSetForegroundWindow((uint)Process.GetCurrentProcess().Id);
User32.SetForegroundWindow(Handle);
User32.ShowWindow(Handle, User32.SW_SHOWNORMAL);