0

我有三种形式:A,B和C。

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

但是,当我在表单 C 上使用 Hide() 方法(在 Button Click 事件中)关闭它时,表单 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按钮上,因为我从现有的关闭按钮复制+粘贴它并且没有意识到该属性已设置。无论如何,谢谢大家的建议!

4

3 回答 3

1

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

此外,该Hide()功能实际上并不关闭窗口。这相当于将Visible属性更改为 False。在此处阅读有关隐藏的信息。

如果你真的想关闭窗口,你应该调用Me.Close().

于 2010-08-16T12:40:57.890 回答
0

尝试设置子窗体的 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
于 2010-08-16T16:40:02.277 回答
0

我唯一能想到的是,您在表单 B 中有一个事件处理程序,它连接到表单 C 的按钮单击事件……尽管您会如何在没有意识到我无法想象的情况下做到这一点。

IssueOrderButton_Click当您在表单 B 的事件中调用显示对话框时,尝试设置表单 C 的父级

f.ShowDialog(Me)

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

于 2010-08-16T16:50:32.343 回答