儿童表单和父表单在Vb.net

时间:2016-11-10 18:34:18

标签: vb.net forms mdichild mdiparent

我有一个名为MdiForm1的父表单,我打开了frm1,这是一个子表单。所以现在一切都很棒 - 现在我需要在frm1中打开另一个表单 - 让我们调用frmX,这就是我的问题出现的地方 - 我之前已经宣布它为mdichild形式,并且做了mdichild.show - 但问题出现了,因为当这个表单打开时(它覆盖了大约1/3的frm1 - 已经打开)并且用户点击了frmX之外 - 它只是消失了。所以我尝试.showDialog()然而我无法做到这一点因为它不是顶级并且是mdiChild因此不会让我.showdialog()。这是我的代码......

    Private Sub cmd1_Click(sender As Object, e As EventArgs) Handles cmd1.Click

    Dim NewMDIChild As New Frmx()

    'Set the Parent Form of the Child window.
    NewMDIChild.MdiParent = MDI1

    'Display the new form
    NewMDIChild.ShowDialog()

    NewMDIChild.Top = 310
    NewMDIChild.Left = 36
    NewMDIChild.Width = 897
End Sub

我在.showDialog()上遇到此错误,这就是它所说的....

  

不是顶级表单的表单不能显示为模式   对话框。在致电之前从任何父表单中删除表单   的ShowDialog。

我试图像这样声明frmX ....

dim frmX as New Form
frmX.showDialog

'specifying Top/Left/Width but that doesn't do anything, basically opens an empty form elsewhere on the screen.
编辑:这有点令人困惑:/

这就是我所做的 - 得到同样的错误。这是在按钮点击的frm1中,假设在模态中打开frmX,这样用户点击frm1就不会使frmX消失。它在正确的位置打开,但是当我点击另一个frm1 --- frmX消失

    Dim frmxName As New FrmX()
    frmxName.MdiParent = Me.MdiParent
    frmxName.ShowDialog()
    frmxName.Top = 310
    frmxName.Left = 36
    frmxName.Width = 897

我的目标是让frmX打开,直到他们点击它为止!

1 个答案:

答案 0 :(得分:1)

将新表单的MDI父级设置为控制表单的MDI父级

在MDI父级中,我调用了Form1。此表单具有属性IsMdiContainer = True

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim myFrmX As New frmX
        myFrmX.MdiParent = Me
        myFrmX.Show()
    End Sub

End Class

在frmX上有一个按钮

Public Class frmX 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim f As New Form
        f.MdiParent = Me.MdiParent
        f.Text = "frmY"
        f.Show()
    End Sub

End Class

单击该按钮可创建新表单,这些表单将显示为

下方主表单的MDI子项

enter image description here

或者如果您只想要一个对话窗口,放弃MDI业务,只显示对话框

Public Class frmX 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim f As New Form
        f.Text = "frmY"
        f.ShowDialog()
    End Sub

End Class

现在,frmY一直关注,直到它关闭。

enter image description here