2

我们如何在父 MDI 窗口中排列子窗体?我可以从父级的菜单中调用和显示子窗体,但是子级会在父级之外弹出-我希望它实际上在父级内部。我检查了 C# 和 VB.Net 解决方案,但它们都说得差不多,即尝试访问 LayoutMDI,例如这里:

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

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

编辑

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

但是,孩子继续从父母身上弹出。这是如何发生的图像。后面较宽的窗体是父窗体,带有gridview 和两个按钮的窗体是弹出的新子窗体。我希望它在父级中弹出“停靠”。

在此处输入图像描述

4

8 回答 8

4

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

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

在这个例子中,我是一个具有IsMdiContainer = True以便它可以承载子表单的表单。

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

Me.LayoutMdi(MdiLayout.Cascade)

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

于 2012-11-23T18:57:03.247 回答
2

不要从 MDIForm 设置 MDI 子属性

在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

结尾

试试这个代码

于 2012-12-11T11:11:05.573 回答
2

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

dim form as new yourform
form.show()
form.MdiParent = nameParent
于 2015-12-24T20:58:07.153 回答
1

尝试在 mdi 父级上添加一个按钮并添加此代码以将您的 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()
于 2013-02-20T19:09:03.963 回答
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
于 2012-11-26T11:02:08.450 回答
0

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

于 2013-04-18T15:33:51.300 回答
0

试试下面的代码,然后......

1 - 更改 MENU 的名称,因为在我的示例中 menuitem 被称为“Form7ToolStripMenuItem_Click”

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

然后让我知道 CHILD 表单是否仍显示在父表单之外

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
于 2012-12-20T01:10:59.857 回答
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

简单而且有效。

于 2016-03-30T18:59:37.937 回答