我们如何在父MDI窗口中安排子表单?我可以从父菜单上的菜单中调用并显示子表单,但子表单在父表项外弹出 - 我希望它实际上在父表单中。我已经检查过C#和VB.Net解决方案,但他们都说的几乎相同,即尝试访问LayoutMDI,例如:
http://msdn.microsoft.com/en-us/library/x9fhk181.aspx
问题是,我在哪里访问它?当我在MDI父代码中时,Me.LayoutMdi
无法识别。我在应用程序的哪个部分放了Me.LayoutMDI
代码?
毕竟,Me.LayoutMDI
代码在父级中有效。我已经尝试了一段时间,但不知道我哪里出错了。
然而,孩子继续弹出父母。这是一个如何发生的图像。后面的更广泛的形式是父级,而具有gridview和两个按钮的形式是弹出的新子级。我希望它在父母中弹出“停靠”。
答案 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
简单而且有效。