我有三种形式: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 在按钮上,我将其复制+从现有关闭按钮中粘贴,并且没有意识到设置属性。无论如何,感谢您的建议!

有帮助吗?

解决方案

我无法复制您所提供的代码所看到的行为。是否在任何形式(也许是在设计师中设置)可能会导致此设置的其他设置?

另外, 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的呼叫表演对话框时尝试设置表格C的父母 IssueOrderButton_Click 通过做

f.ShowDialog(Me)

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top