Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在visual basic中退出时打开和关闭表单?_Vb.net_Winforms - Fatal编程技术网

Vb.net 在visual basic中退出时打开和关闭表单?

Vb.net 在visual basic中退出时打开和关闭表单?,vb.net,winforms,Vb.net,Winforms,如何在次窗体退出时重新加载主窗体?例如,如果frmMain是主窗体,而您隐藏了它以加载另一个名为GenerateNumbers的窗体,那么当用户退出GenerateNumbers时,如何将frmMain取回?如果将次窗体显示为模式,应该很容易。将其放在用于显示第二个窗体的任何事件中: frmMain.Visible = False frmGenerateNumbers.ShowDialog() frmMain.Visible = True 如果使用ShowDialog调用辅助窗体,则在从Sho

如何在次窗体退出时重新加载主窗体?例如,如果frmMain是主窗体,而您隐藏了它以加载另一个名为GenerateNumbers的窗体,那么当用户退出GenerateNumbers时,如何将frmMain取回?

如果将次窗体显示为模式,应该很容易。将其放在用于显示第二个窗体的任何事件中:

frmMain.Visible = False
frmGenerateNumbers.ShowDialog()
frmMain.Visible = True

如果使用ShowDialog调用辅助窗体,则在从ShowDialog方法返回辅助窗体后,将使主窗体可见

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim frm2 As Form2 = New Form2
    Me.Hide()
    frm2.ShowDialog()
    Me.Show()
End Sub

最好的方法是将事件处理程序添加到子窗体的
关闭事件中。这样,当子窗体关闭时,主窗体将收到通知,然后它可以重新显示自己。例如:

AddHandler frmChild.Closing, AddressOf ChildClosing
frmChild.Show()
Me.Hide()

'....

Private Sub ChildClosing(sender As Object, e As EventArgs)
    RemoveHandler CType(sender, Form).Closing, AddressOf ChildClosing
    Me.Show()
End Sub
正如其他人所说,如果您使用
ShowDialog
方法显示子表单,那么就容易多了。事实上,如果您这样做,那么实际上没有理由隐藏主窗体,您可以将主窗体作为所有者传递到对话框中:

frmChild.ShowDialog(Me)
提示:如果不隐藏主窗体,请将子窗体的“起始位置”属性设置为位于所有者的中心


或者,您可以提供对主窗体的引用,以便在关闭时可以使主窗体可见,但我认为这是最不可取的选择。

是否需要在关闭时将一些信息从GenerateNumbers窗体移动到主窗体?否。在这种情况下,每个窗体都有各自的用途,无需保存工作。更具体地说,它是一个彩票号码生成器。项目+属性,应用程序选项卡,关闭模式=最后一个表单关闭时。现在,您只需调用Show()即可显示新表单并关闭不希望处于活动状态的表单。。。将frmMain作为frmMain()Me.Hide()GenerateNumbers.Show()frmMain=Nothing@Brandon不要将frmMain设置为nothing,使用ShowDialog而不是Show。FRMMA在你的创业表格中吗?如果是这样的话,你为什么要再次创建它?@Brandon why you kill a Main form->frmMain=Nothing?@Fabio我在这里的某个地方找到了一个关于杀死另一个表单以节省内存的答案。我以为这就是我应该做的。我是vb.net的新手,所以我在这里从头开始学习。这就是为什么我把基本的事情弄错了。