Vb.net 多次打开第二个表单时出错

Vb.net 多次打开第二个表单时出错,vb.net,forms,Vb.net,Forms,我在form1中有一个打开form2的按钮。我使用frm2.show()来实现这一点。我第一次打开frm2时,它完全正常工作,但当我关闭frm2并单击frm1中的按钮再次打开frm2时,我得到以下错误: 有人能告诉我怎么解决吗? 编辑:我有一个模块,其中有数据库连接和表单声明: Public frmGame As New Game Public frmPlay As New Play Public frmFinish As New GameFinish Public frmLogin As N

我在form1中有一个打开form2的按钮。我使用
frm2.show()
来实现这一点。我第一次打开frm2时,它完全正常工作,但当我关闭frm2并单击frm1中的按钮再次打开frm2时,我得到以下错误:

有人能告诉我怎么解决吗?

编辑:我有一个模块,其中有数据库连接和表单声明:

Public frmGame As New Game
Public frmPlay As New Play
Public frmFinish As New GameFinish
Public frmLogin As New Login
Public frmManage As New Manage
Public frmInsert As New Toevoegen

当我点击form1中的一个按钮时,我打开表单。

听起来好像你正在接近frm2。关闭一个表单应该处理它并释放它的资源,所以不能简单地再次显示它。相反,您需要创建对象的新实例,如下所示:

frm2=new Form2()
frm2.Show()
如果这不起作用(可能是因为您不想重新初始化表单的数据成员),可以使用Hide()而不是Close()在程序执行期间临时隐藏表单

如果需要防止使用X按钮关闭表单,可以使用几种不同的方法:

  • 最好的方法是隐藏或禁用关闭按钮。仔细阅读,更好地了解如何做到这一点

  • 您可以从frm2内部或从主窗口使用FormClosing事件。对传入的FormClosingEventArgs对象设置Cancel属性。这里的问题是,您需要提供一个额外的代码路径,以便在实际需要关闭表单时关闭表单。FormClosingEventArgs对象的CloseReason属性应该为您提供一种正确处理该问题的方法。不用说,这可能是最危险的方法,因为当应用程序关闭时,您需要关闭此窗口,但您也有意阻止这种情况发生

  • 您可以在生成frm2的窗体中捕获FormClosed事件,然后创建窗口的新实例。同样,您需要提供一个代码路径,以便在应用程序关闭时关闭窗口


  • 总之,方法1可能是最安全的。当应用程序关闭时,您可以使用.close()关闭窗口,但用户不能使用X按钮将其关闭。

    听起来好像您正在关闭frm2()。关闭一个表单应该处理它并释放它的资源,所以不能简单地再次显示它。相反,您需要创建对象的新实例,如下所示:

    frm2=new Form2()
    frm2.Show()
    
    如果这不起作用(可能是因为您不想重新初始化表单的数据成员),可以使用Hide()而不是Close()在程序执行期间临时隐藏表单

    如果需要防止使用X按钮关闭表单,可以使用几种不同的方法:

  • 最好的方法是隐藏或禁用关闭按钮。仔细阅读,更好地了解如何做到这一点

  • 您可以从frm2内部或从主窗口使用FormClosing事件。对传入的FormClosingEventArgs对象设置Cancel属性。这里的问题是,您需要提供一个额外的代码路径,以便在实际需要关闭表单时关闭表单。FormClosingEventArgs对象的CloseReason属性应该为您提供一种正确处理该问题的方法。不用说,这可能是最危险的方法,因为当应用程序关闭时,您需要关闭此窗口,但您也有意阻止这种情况发生

  • 您可以在生成frm2的窗体中捕获FormClosed事件,然后创建窗口的新实例。同样,您需要提供一个代码路径,以便在应用程序关闭时关闭窗口


  • 总之,方法1可能是最安全的。当应用程序关闭时,可以使用.close()关闭窗口,但是用户不能用X按钮关闭它。

    可能需要发布一些代码,显示每个表单是如何初始化的,以及在哪里显示和关闭表单2。这些声明实际上不需要是新的。此时可能需要发布一些代码,显示每个表单是如何初始化的,以及在哪里显示和关闭表单2。这些声明不需要在这一点上真的需要
    New
    先生,但是当第二个窗体关闭(FormClosed事件)时,我不能说像frm2.hide(),我的意思是如何隐藏用户已关闭的窗体?。捕获FormClosed事件并隐藏它,而不是隐藏先生,但是当第二个窗体关闭(FormClosed事件)时,我不能说像frm2.hide(),我的意思是如何隐藏已被用户关闭的表单?。捕获formclosing事件并将其隐藏