VB.NET:在这种情况下如何关闭和重新打开对话框?

VB.NET:在这种情况下如何关闭和重新打开对话框?,vb.net,winforms,.net-3.5,dialog,Vb.net,Winforms,.net 3.5,Dialog,我正在VB.NET中开发一个WinForms应用程序,它处理样式数据集,当用户单击另一个样式集的标签时,它会通过一个对话框提示“您正在离开此样式预设以编辑另一个样式预设。是否保留此样式预设的更改?[是][否]” 但是,我面临的问题是,当用户单击任一选项,对话框关闭时,所有内容都必须刷新,再次加载表单似乎是一个不错的选择 我试着在模块上安装一个公共子模块,这样做: Public Sub CloseOpenStyleDlg() KeepOrDiscardPrompt.Close()

我正在VB.NET中开发一个WinForms应用程序,它处理样式数据集,当用户单击另一个样式集的标签时,它会通过一个对话框提示“您正在离开此样式预设以编辑另一个样式预设。是否保留此样式预设的更改?[是][否]”

但是,我面临的问题是,当用户单击任一选项,对话框关闭时,所有内容都必须刷新,再次加载表单似乎是一个不错的选择

我试着在模块上安装一个公共子模块,这样做:

Public Sub CloseOpenStyleDlg()
    KeepOrDiscardPrompt.Close()
    StylesDlg.Close()
    StylesDlg.ShowDialog()
End Sub
但是,一旦从提示符调用该sub,它就会使应用程序崩溃。(调试中没有显示错误,只是崩溃)我应该如何从给定的对话框中关闭该对话框,它的父级,然后重新打开它的父级?(这将触发父级的所有对话框\u Load()代码)


提前感谢!:)

关闭表单时,将关闭对象中创建的所有资源,并释放表单


如果要重用窗口实例,请使用
StylesDialog.Hide()
函数。

您需要再次实例化该对话框。以您的代码为例:

Public Sub CloseOpenStyleDlg()
    KeepOrDiscardPrompt.Close()
    StylesDlg.Close()
    StylesDlg = new StylesDlg()
    StylesDlg.ShowDialog()
End Sub

但是,hide是否再次调用Form_Load()事件?直觉上,我认为这类似于使其不可见但不关闭。我没有测试它,但我认为在再次调用Show时不会调用Form_Load()。隐藏然后显示表单不会引发加载事件。如果您有需要再次调用的初始化代码,可以将其从Form_Load方法中删除,然后放入另一个方法中并显式调用。这就是隐藏函数的作用,它将窗体可见性设置为false。如果调用Close,您将无法重新打开已处理的表单实例。谢谢=)我将代码重新安排在表单_Load()之外,从现在起,我将几乎始终遵循最佳实践(编写糟糕的代码是一个地狱!),但您的示例解决了我对如何重新打开表单的疑问,所以选择了=)