C# 如何使窗口仅位于我的应用程序中所有其他窗口的顶部?

C# 如何使窗口仅位于我的应用程序中所有其他窗口的顶部?,c#,window,topmost,C#,Window,Topmost,我想在我的C#Windows窗体应用程序中显示一个状态窗口,在应用程序等待获取锁时通知用户。这是一个应用程序定义的东西,但是,窗口应该是可见的,并且始终保持在我的应用程序的所有其他窗口的顶部,即使用户单击另一个窗口(例如,它后面的较大主窗口) 它不能是模态的(因此不能使用ShowDialog()),因为应用程序需要在后台不断尝试,如果最终可以获得锁,则需要自动关闭窗口,并且对于整个窗口站(即,在该终端会话中运行的所有应用程序)来说,它实际上不应该是最上面的 我知道Form.topmest属性,但

我想在我的C#Windows窗体应用程序中显示一个状态窗口,在应用程序等待获取锁时通知用户。这是一个应用程序定义的东西,但是,窗口应该是可见的,并且始终保持在我的应用程序的所有其他窗口的顶部,即使用户单击另一个窗口(例如,它后面的较大主窗口)

它不能是模态的(因此不能使用ShowDialog()),因为应用程序需要在后台不断尝试,如果最终可以获得锁,则需要自动关闭窗口,并且对于整个窗口站(即,在该终端会话中运行的所有应用程序)来说,它实际上不应该是最上面的

我知道Form.topmest属性,但它只能带来并保持一个窗口高于所有其他窗口,即使是来自其他应用程序的窗口。这显然不是我想要的


我知道这是可能的,我以前在其他应用程序中见过很多次。我只是不知道怎么做。

如果将主窗体传递到状态窗体的方法中,它将位于主窗体的顶部,但不会位于其他应用程序的顶部。因此,在主窗体中,您可以使用如下代码:

StatusForm statusForm = new StatusForm();
statusForm.Show(this);

但是,这只会指出应用程序的一个窗口作为所有者。

您必须将子窗体的
所有者属性设置为父窗体,并使用
显示
来显示子窗体。

谢谢,这两种解决方案都很好。不幸的是,我只能将一个答案标记为可接受的解决方案(但两个答案都投赞成票)。我还发现,最好将拥有的窗口的ShowInTaskbar属性设置为false,这样它们就不会弄乱任务栏和Alt+Tab窗口列表。它似乎也适用于多个窗口。(同一表单类至少有多个实例。)所有这些实例都保留在所属窗口的前面。不直接相关,但如果要在主父级上启动多个不同的表单类并保持事件的原始开始时间线,则完全忽略owner属性。这样,父窗口打开的每个子窗口都将在父窗口的顶部保持打开状态。仅在与父窗口交互时隐藏,但在与父窗口打开的其他子窗口交互时将保持激活状态但失去焦点。不一致地使用owner属性会导致子窗口上出现奇怪和不稳定的行为。