【问题标题】:MDI Child Form not DisplayingMDI 子窗体不显示
【发布时间】:2017-08-03 15:44:40
【问题描述】:

我有一个 MDI 子表单 (frmReview),我打算使用以下代码在我的最大化父表单上显示:

Public Sub frmTransport_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    'keyboard shortcuts
    If e.KeyCode = Keys.F1 Then LaunchManual()
    If e.Control Then
        If e.KeyValue = Keys.R Then
            Me.WindowState = FormWindowState.Maximized
            Dim review As New frmReview
            review.MdiParent = Me
            review.Location = New Point(1175, 0)
            review.BringToFront()
            review.Show()
        End If
        ...
        ...
        End Sub

点 (1175, 0) 是 TabControl 与 Yellow mdi Container 相接的右上角。父表单的 isMdiContainer 属性设置为 True,并且当我运行此代码时,frmReview 的 Load 事件确实会触发,但我没有看到子表单:

在我拥有的另一个程序中,我使用相同的过程来显示 MDI 子窗体,它工作正常。关于为什么会发生这种情况的任何建议?

提前致谢!

【问题讨论】:

  • 您知道Location 对应于控件的左上角,而您将其设置为父控件的右上角吗?试试 (588, 0),它应该在中间。您只需要计算合适的位置即可
  • 我的错误 - 将其设置为 (588, 0),仍然无法正常工作

标签: vb.net mdi mdichild mdiparent


【解决方案1】:

如果你想在右上角显示表单,使用这个

Dim mdiClient = Me.Controls.OfType(Of MdiClient).FirstOrDefault()
Me.WindowState = FormWindowState.Maximized
Dim review As New frmReview
review.MdiParent = Me
review.BringToFront()
review.Show()
' order of Show() call changed so review has a size
review.Location = New Point(mdiClient.Size.Width - review.Width, 0)

【讨论】:

  • 我没有明确地试图在右上角显示表单,但这段代码显示了我的表单。谢谢你。你能解释一下为什么我的代码不起作用吗?
  • 那么 Show() 的顺序有一些影响。调用 Show 后,它将具有初始大小和位置。之前不会。这就是为什么我需要这个顺序来进行涉及其宽度的数学运算……不知道为什么在以原始顺序调用时未显示您的表单。可能 MDI 表单上已经存在的任何东西仍然在顶部。
  • 我在原始代码中所要做的就是在 Location = 之前移动 Show() 。谢谢!
  • 好吧..我可以节省很多时间:)
猜你喜欢
  • 2020-05-31
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
相关资源
最近更新 更多