如何在MDIChild窗体内正确使用ShowDialog()方法?

3

我有一个需要显示对话框的MDIChild表单。目前我是从MDIChild表单内部这样做的...

f.ShowDialog(Me)

我应该使用f.ShowDialog(mdiparent)吗?

在调用ShowDialog()之前设置所有者有何区别?

3个回答

4

我不确定这是否相关,但我在使用 ShowDialog 时遇到了一些问题,通常我会这样做:

f.Owner = Me
f.ShowDialog()

我会看看它是否有所改变。 - dotjoe

3

区别在于哪个父级拥有对话框。如果您明确设置了父级,则该窗口拥有对话框。如果您不设置它(使用 ShowDialog 的无参数版本),则应用程序的当前活动窗口拥有对话框。顺便说一下,这在 MSDN 上有说明。

这在通过使用 FormStartPosition.CenterParent 枚举设置 StartPosition 属性来居中对话框时非常有用。


我想你可能需要做一些诡计来确保当前活动窗口不是“父级”……除非你从另一个窗体的操作中触发ShowDialog,这会很奇怪。 - dotjoe

0

这确实有所不同...

我有一个调用ShowDialog(Me)的MDI子窗口,在生成的对话框窗口中,Me.Owner引用MDI容器,而不是MDI子窗口。

使用Me.Owner.ActiveControl是一种解决方法,但使用:

       Dim ContractForm As New Contract(strType, intMode)
       ContractForm.Owner = Me
       dgrAction = ContractForm.ShowDialog()

理解得很好。在生成的对话框中,Me.Owner现在确实引用了MDI子窗口。

希望这可以帮到你!


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