我有三种形式: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
,因为我从现有的关闭按钮复制+粘贴它,但没有意识到该属性已设置。无论如何,谢谢你的建议!
答案 0 :(得分:1)
我无法使用您提供的代码重现您所看到的行为。是否有任何形式的其他设置(可能在设计器中设置)可能导致此问题?
此外,Hide()
函数实际上并未关闭窗口。它相当于将Visible
属性更改为False。了解隐藏here。
如果你真的想要关闭窗口,你应该打电话给Me.Close()
。
答案 1 :(得分: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
答案 2 :(得分:0)
我唯一能想到的是你在Form B中有一个事件处理程序,它连接到Form C的按钮点击事件......虽然你怎么会这样做而没有意识到我无法想象。
通过执行
在表单B的IssueOrderButton_Click
事件中调用show对话框时,尝试设置表单C的父级
f.ShowDialog(Me)
我同意您可能希望使用Me.Close()
而不是Me.Hide()