2011-05-25 69 views
2

我写了一个相对较大的应用程序,其中有很多对话框和窗体等。 我正在用Form.ShowDialog()打开它们。C#Windows无法打开顶部

很多时候,窗体在现有窗口后面打开,例如昨天我在一台机器上测试了它,打开了其他几个程序:许多Windows资源管理器窗口,几个Excel窗口等等。我的许多窗体,打开/保存文件对话框等应该打开但没有打开。我正在旋转我的拇指,直到我按下Alt + Tab并意识到他们实际上是在另一个窗户后面。

为什么会发生这种情况,以后如何停止?谢谢。

+0

显示框时,父窗口是否有焦点? – Ryan 2011-05-25 23:59:14

+0

@minitech是的。它通常是一个按钮点击,菜单点击等导致表单显示。 – Ozzah 2011-05-26 00:08:27

回答

4

使用ShowDialog覆盖,它将所有者窗口作为参数。

通过作为对话框的所有者传入您的主窗口,您可以保证对话框始终在其前面弹出,并保持在它的前面。

而且如果他们使用其他应用程序,它不会惹恼用户。

+1

这是执行此操作的唯一正确方法,也是此线程中唯一正确的答案。 – codekaizen 2011-05-26 00:38:59

+0

他的问题描述有点缺乏......他真的希望他的所有表格都是模态吗?我怀疑它......但我可能是错的。 – alexD 2011-05-26 00:44:32

+0

他们是儿童形式;操作系统窗口管理器的核心功能之一是管理子窗体,以便它们不会在父窗体后面弹出。他需要正确设置父窗口,并且这是默认情况下完成的方式。如果他不想要形式,那么还有其他方法可以创建没有它的子窗口,但保留父子关系。 – codekaizen 2011-05-26 00:46:11