MDI子窗口无法通过.ShowDialog()显示为什么?

MDI子窗口无法通过.ShowDialog()显示为什么?

问题描述:

我使用winforms MDI窗口并在其上显示子窗口。 我需要使用模态对话模式(.ShowDialog())显示其中的一些,但仍将它们显示为子窗口(它们应该保留在父窗口的边界内)。MDI子窗口无法通过.ShowDialog()显示为什么?

当我尝试这样做,我得到一个编译时错误说,子窗口无法显示一个模式对话框模式窗口。

有没有办法做到这一点?

我不认为有这样做直接的方式。但是,在低层模式对话框通过禁用父窗口来实现。尝试显示无模式MDI子项并保持父项禁用,除非此子项关闭。

+0

谢谢。那我已经读过msdn了。我希望我错过了一些东西。 – Mariusz 2010-07-12 09:43:56

我通常会解决这个问题,通过将所有的childform的控件是用户控制的部分,然后将用户控件添加到childform,使一个单独的对话框还包含用户控件。这意味着你可以重用几乎所有的代码,并且通常有些代码会不同(无论如何,子表单通常没有OK/Cancel按钮等)。

但是,如果你不希望走这路线这里,理应有一种变通方法一CodeProject上的文章(我还没有仔细端详):MDI child as dialog form (MDI modal workaround)

+0

嗨, 谢谢,我过去禁用了其他窗口。当然,它的工作原理,但它会给你在屏幕上灰化控制的讨厌效果。 – Mariusz 2010-07-12 09:58:49

如果你想模态窗口简单地在父表单的范围内打开,只需将表单属性StartPosition设置为CenterParent即可。