.net 为什么隐藏子窗体也会隐藏父窗体?

.net 为什么隐藏子窗体也会隐藏父窗体?,.net,vb.net,winforms,events,showdialog,.net,Vb.net,Winforms,Events,Showdialog,我有三种形式:A、B和C 单击按钮时,a显示B。类似地,B显示C。两者都使用ShowDialog()方法 但是,当我在表单C上使用Hide()方法(在按钮单击事件中)关闭它时,表单B也会关闭 为什么会这样?就我所知,它不应该这样做。我当然没有写任何代码来告诉它这样做 代码如下: ' from Form "A" (MainForm) Private Sub OrdersDataGridView_CellDoubleClick(ByVal sender As Object, ByVal e As S

我有三种形式:A、B和C

单击按钮时,a显示B。类似地,B显示C。两者都使用ShowDialog()方法

但是,当我在表单C上使用Hide()方法(在按钮单击事件中)关闭它时,表单B也会关闭

为什么会这样?就我所知,它不应该这样做。我当然没有写任何代码来告诉它这样做

代码如下:

' from Form "A" (MainForm)
Private Sub OrdersDataGridView_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles OrdersDataGridView.CellDoubleClick
    ShowViewOrderForm(sender)
End Sub

Private Sub ShowViewOrderForm(ByVal CurrentDGV As DataGridView)
    If Not CurrentDGV Is Nothing Then
        Dim f As New ViewOrderForm
        f.SetOrderNo(CurrentDGV.CurrentRow().Cells().Item(0).Value)
        f.SetDeliveryServiceType(CurrentDGV.CurrentRow().Cells().Item(5).Value)

        f.ShowDialog()
    End If
End Sub

' from Form "B" (ViewOrderForm)
Private Sub IssueOrderButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IssueOrderButton.Click
    Dim f As New IssueForm
    f.SetOrderNo(ThisOrderNo)
    f.ShowDialog()
End Sub

' from Form "C" (IssueForm)
Private Sub CloseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloseButton.Click
    Me.Hide()
End Sub

更新:我是个白痴
DialogResult
在按钮上设置为
Cancel
,因为我从现有的Close按钮复制并粘贴了它,但没有意识到设置了该属性。谢谢大家的建议

我无法用您提供的代码重现您看到的行为。是否有任何表单上的其他设置(可能在设计器中设置)可能导致此问题

另外,
Hide()
函数实际上并不关闭窗口。这相当于将
Visible
属性更改为False。阅读有关隐藏的内容


如果确实要关闭窗口,应调用
Me.Close()

尝试设置子窗体的mdiParent属性:

    If IsNothing(_cases) Then
        _cases = New frmGrid        
        _cases.MdiParent = Me
        _cases.init(_main, 0, "", "")
        _cases.WindowState = FormWindowState.Maximized
    End If
    _cases.Visible = Me.mnuViewCaseFiles.Checked

我能想到的唯一一件事是,在表单B中有一个连接到表单C的按钮点击事件的事件处理程序。。。虽然你会怎么做而不知道我无法想象

在调用表单B的
IssueOrderButton\u单击
事件中的show dialog时,尝试设置表单C的父级

f.ShowDialog(Me)

我同意您可能想使用
Me.Close()
而不是
Me.Hide()

也许,一些代码?试过了,一切正常。谢谢,我添加了代码!是的,结果设置为取消-哎呀!