【问题标题】:How to correctly ShowDialog() from inside an MDIChild form?如何从 MDIChild 表单中正确显示对话框()?
【发布时间】:2009-01-28 20:48:44
【问题描述】:

我有一个需要显示对话框的 MDIChild 表单。我目前正在从 mdichild 表单中这样做......

f.ShowDialog(Me)

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

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

【问题讨论】:

    标签: .net winforms mdi showdialog


    【解决方案1】:

    我不确定这是否相关,但我在 ShowDialog 中传递拥有表单时遇到了一些问题,我通常这样做:

    f.Owner = Me
    f.ShowDialog()
    

    【讨论】:

    • 我会看看它是否有所作为。
    【解决方案2】:

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

    这很有用,通过使用 FormStartPosition.CenterParent 枚举设置 StartPosition 属性使对话框居中。

    【讨论】:

    • 我猜你必须做一些诡计才能使当前活动窗口不是“父”...除非你从另一个表单操作触发显示对话框,这很奇怪。
    【解决方案3】:

    它确实有所作为......

    我有一个调用 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 子项。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 2020-02-16
      相关资源
      最近更新 更多