C# - 如何处理两个“TopMost”窗体?

5
我有一个父窗体,设置为TopMost,然后我有另一个窗体,当单击按钮时打开。这个子窗体也被设置为TopMost。我遇到的第一个问题是,当我打开子窗体时,应用程序基本上会冻结,因为您无法访问任何内容。我决定不使用ShowDialog()打开子窗体,而是使用Show(this)。这确实解决了最初的问题,但现在我又有一个新问题。子窗体的起始位置被设置为CenterParent,当我使用Show(this)时,它不起作用。有没有办法让子窗体在父窗体和子窗体都设置为TopMost的同时打开,同时将子窗体的起始位置设置为CenterParent?谢谢。
3个回答

5

我有一些有用的内容与大家分享。不要使用以下代码:

form2.TopMost = true;

在主表单中使用以下代码:

form2.Owner = this;

如果使用Form.TopMost属性,窗体将会覆盖所有其他非最顶层的窗体,包括其他应用程序的窗体。相反,可以将Form.Owner属性设置为父窗体 - 应该在此窗体下方的窗体(例如主窗体)。祝你好运 :)

这是一个很棒的技巧!我一直使用TopMost,但在许多情况下,我真正应该使用Owner。这样做可以使TopMost属性可用于我真正想要置顶的窗体。每天都会学到新东西!即使是从低声望用户和六年前的帖子中。 - Joe Gayetty

3
您可以尝试在子窗体可见期间清除父窗体的TopMost属性。这将解决哪个窗体应该置顶的问题,因为只会有一个窗体置顶。

好主意,应该自己想到的哈哈。 - user

0

嗯。我创建了两个窗体。然后我在两个窗体上都设置了TopMost = true。然后我在第一个窗体上添加了按钮并编写了new Form2().ShowDialog();

一切都很好。Form2是活动的且可点击。因为调用了ShowDialog,所以Form1不是。

第二种变体也可以正常工作。Form2在屏幕中央打开。

也许我误解了什么?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接