Vb.net 中的子表单和父表单不匹配

Child Forms and Parent forms mismatch in Vb.net

我在其中有一个名为 MdiForm1 的父窗体,我打开 frm1,它是一个子窗体。所以此时一切都很好 - 现在我需要在 frm1 中打开另一个表单 - 让我们称之为 frmX,这就是我的问题出现的地方 - 我之前已经将它声明为 mdichild 表单,并且做了 mdichild.show - 但是问题来了因为当这个表单打开时(它覆盖了 frm1 的大约 1/3 - 它已经打开)并且用户在 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() 上收到此错误,它是这样说的....

Form that is not a top-level form cannot be displayed as a modal dialog box. Remove the form from any parent form before calling 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,直到他们点击关闭它!

将新窗体的 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 子窗体

或者如果您只想要一个对话框 window,放弃 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 有焦点,直到它关闭。