如何在VB.NET中打开位于MDI父级中的子窗体?

时间:2012-11-23 18:01:26

标签: vb.net vb.net-2010 mdichild

我们如何在父MDI窗口中安排子表单?我可以从父菜单上的菜单中调用并显示子表单,但子表单在父表项外弹出 - 我希望它实际上在父表单中。我已经检查过C#和VB.Net解决方案,但他们都说的几乎相同,即尝试访问LayoutMDI,例如:

http://msdn.microsoft.com/en-us/library/x9fhk181.aspx

问题是,我在哪里访问它?当我在MDI父代码中时,Me.LayoutMdi无法识别。我在应用程序的哪个部分放了Me.LayoutMDI代码?

修改

毕竟,Me.LayoutMDI代码在父级中有效。我已经尝试了一段时间,但不知道我哪里出错了。

然而,孩子继续弹出父母。这是一个如何发生的图像。后面的更广泛的形式是父级,而具有gridview和两个按钮的形式是弹出的新子级。我希望它在父母中弹出“停靠”。

enter image description here

8 个答案:

答案 0 :(得分:4)

如果您的表单在MDI父级“外部”,那么您很可能没有设置MdiParent属性:

Dim f As New Form
f.MdiParent = Me
f.Show()

在本例中,我是一个包含IsMdiContainer = True的表单,以便它可以托管子表单。

要重新安排子表单布局,只需从MdiContainer表单中调用该方法:

Me.LayoutMdi(MdiLayout.Cascade)

MdiLayout枚举也有平铺和排列图标值。

答案 1 :(得分:2)

不要从MDIForm

设置MDI Child属性

在Chileform Load事件中提供以下代码

    Dim l As Single = (MDIForm1.ClientSize.Width - Me.Width) / 2
    Dim t As Single = ((MDIForm1.ClientSize.Height - Me.Height) / 2) - 30
    Me.SetBounds(l, t, Me.Width, Me.Height)
    Me.MdiParent = MDIForm1

结束

试试这段代码

答案 2 :(得分:2)

您需要将新表单的MdiParent属性设置为MDI父表单的名称,如下所示:

dim form as new yourform
form.show()
form.MdiParent = nameParent

答案 3 :(得分:1)

   Private Sub FileMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) handles FileMenu.Click

    Form1.MdiParent = Me
    Form1.Dock = DockStyle.Fill
    Form1.Show()
End Sub

答案 4 :(得分:1)

尝试在mdi parent上添加一个按钮并添加此代码'以在mdi父级中设置您的mdi子级。将yourchildformname更改为您的MDI Child的表单名称,看看是否有效。

    Dim NewMDIChild As New yourchildformname()
    'Set the Parent Form of the Child window.
    NewMDIChild.MdiParent = Me
    'Display the new form.
    NewMDIChild.Show()

答案 5 :(得分:0)

尝试下面的代码.....

1 - 更改MENU的名称,就像在我的示例中一样,menuitem被称为'Form7ToolStripMenuItem_Click'

2 - 确保将其粘贴到MDIFORM中,而不仅仅是基本的FORM

然后让我知道儿童表格是否仍然显示在父表格外面

Private Sub Form7ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Form7ToolStripMenuItem.Click

    Dim NewForm As System.Windows.Forms.Form
    NewForm = New System.Windows.Forms.Form
    'USE THE NEXT LINE - to add an existing CUSTOM form you already have
    'NewForm = Form7                         
    NewForm.Width = 400
    NewForm.Height = 250
    NewForm.MdiParent = Me
    NewForm.Text = "CAPTION"
    NewForm.Show()
    DockChildForm(NewForm, "left")          'dock left
    'DockChildForm(NewForm, "right")         'dock right
    'DockChildForm(NewForm, "top")           'dock top
    'DockChildForm(NewForm, "bottom")        'doc bottom
    'DockChildForm(NewForm, "full")          'fill the client area (maximise the child INSIDE the parent)
    'DockChildForm(NewForm, "Anything-Else") 'center the form

End Sub

Private Sub DockChildForm(ByRef Form2Dock As Form, ByVal Position As String)

    Dim XYpoint As Point
    Select Case Position
        Case "left"
            Form2Dock.Dock = DockStyle.Left
        Case "top"
            Form2Dock.Dock = DockStyle.Top
        Case "right"
            Form2Dock.Dock = DockStyle.Right
        Case "bottom"
            Form2Dock.Dock = DockStyle.Bottom
        Case "full"
            Form2Dock.Dock = DockStyle.Fill
        Case Else
            XYpoint = New Point
            XYpoint.X = ((Me.ClientSize.Width - Form2Dock.Width) / 2)
            XYpoint.Y = ((Me.ClientSize.Height - Form2Dock.Height) / 2)
            Form2Dock.Location = XYpoint
    End Select
End Sub

答案 6 :(得分:0)

尝试将子窗体的StartPosition属性设置为Center Parent。您可以从表单属性中选择。

答案 7 :(得分:0)

请参阅此页面了解解决方案! https://msdn.microsoft.com/en-us/library/7aw8zc76(v=vs.110).aspx

我能够在父级内部实现Child表单。

在下面的示例中,Form2应更改为您的子表单的名称。 NewMDIChild.MdiParent=me是打开控件的主要表单(显示)子表单是父表单或Me

NewMDIChild.Show()是您的子表单,因为您已将您的子表单与Dim NewMDIChild As New Form2()

相关联
Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
   Dim NewMDIChild As New Form2()
   'Set the Parent Form of the Child window.
   NewMDIChild.MdiParent = Me
   'Display the new form.
   NewMDIChild.Show()
End Sub

简单而且有效。