使表格最多但不超过其他应用程序

时间:2018-03-16 14:33:22

标签: c# .net vb.net winforms

在vb.net或c#WinForms中,如何将表单放在项目中其他表单的最顶层,而不是在其他应用程序的窗口上?

使用form.topmost = True将表单放在其他应用程序之上。

修改

正在寻找启动画面。

以下是此表单的预期行为示例。它仍然是应用程序中其他所有内容的顶部,您可以与它以及它背后的表单进行交互。

enter image description here

3 个答案:

答案 0 :(得分:1)

要将表单放在应用程序的其他表单之上,您可以使用BringToFront方法。

Application.OpenForms["MyForm"].BringToFront();

用户可以访问其他表格。

答案 1 :(得分:1)

topmost = true应该适用于您的应用程序。必须发生用户错误。

答案 2 :(得分:0)

您可以使用SetWindowPos方法将窗口置于前面而不激活它。您可以在计时器中调用它以使其保持在最前面(但这可能会将其置于其他应用程序之前,因此如果您是激活应用程序,则只需要这样做)或者您必须检测其他表单何时触发Activated事件然后调用它。

internal const int SWP_NOMOVE = 0x0002;
internal const int SWP_NOSIZE = 0x0001;
internal const int SWP_SHOWWINDOW = 0x0040;
internal const int SWP_NOACTIVATE = 0x0010;
internal const int SWP_NOOWNERZORDER = 0x0200;
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
private static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

用以下方式调用: SetWindowPos(form.Handle,0,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW|SWP_NOACTIVATE);