forms最顶层?

如何在所有其他应用程序上显示某些内容。 我希望在我的程序的所有forms上显示某些内容,并在我的桌面上打开所有其他程序(不是我的)。

* Top Most不起作用我已经测试过,我的浏览器可以超出我的应用程序:S

这是我使用TopMost为TRUE时的图像。 你可以看到我的浏览器已经结束了……

http://sofzh.miximages.com/c%23/www.freeimagehosting.net

您可以使用表单实例并将属性TopMost设置为True。


如果你想要覆盖所有Windows,还有另一种方法可以使用Win32 Api

这是你可以做的:

在您的表单类中添加:

[System.Runtime.InteropServices.DllImport("user32.dll")] public static extern bool SetForegroundWindow(IntPtr hWnd); 

在表单加载中,您可以添加:

 SetForegroundWindow(this.Handle); 

这应该可以解决问题。

更新

TopMost应该完成这项工作但是:最顶级的OR / AND Win32 Api调用只能在Visual Studio中运行(对于Vista和VS2008我测试它…我不能告诉其他)。 尝试从/ bin目录运行带有.Exe的程序,它会起作用。

Form.TopMost属性将您的表单设置为所有其他正在运行的Windows应用程序(不仅仅是您的表单)上方的顶部表单。

 myForm.TopMost = true; // This will do the job 

TopMost属性是你需要的(从来没有遇到过这个问题)


在MSDN上它说:

最上面的表单是一种与所有其他(非最顶层)表单重叠的表单,即使它不是活动表单或前景表单。 最顶层的表单始终显示在桌面上窗口的z顺序的最高点。

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.topmost.aspx

在我的团队中,我们有一个内部工具,在Windows启动后继续运行。 它是一个WinMorm,TopMost设置为ture。 在Vista上,有时候我们遇到了同样的问题。 在非常随机的时间,表单将丢失TopMost属性,而其他非最顶层的窗口可能会出现在其上方。 我有一个研究日志,但没有找到答案,许多其他人也有同样的问题,似乎在Vista的非常低的水平上有一个关于TopMost属性的错误。