【问题标题】:VB.NET: How to close and re-open a dialog in this case?VB.NET:在这种情况下如何关闭和重新打开对话框?
【发布时间】:2010-11-25 11:01:40
【问题描述】:

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

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

我试过在一个模块上放一个公共子,这样做:

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

但是,一旦从提示符中调用该 sub,它就会使应用程序崩溃。 (在调试中不显示错误,只是崩溃)我应该如何从给定的对话框中关闭对话框,它是父级,然后重新打开它的父级? (触发父级的所有 Dialog_Load() 代码)

提前致谢! :)

【问题讨论】:

    标签: vb.net winforms .net-3.5 dialog


    【解决方案1】:

    您需要再次实例化对话框。如果我以你的代码为例:

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

    【讨论】:

    • 谢谢 =) 我在 Form_Load() 之外重新安排了我的代码,从现在开始,我将几乎总是遵守最佳实践(写得不好的代码真是太难维护了!),但是您的示例解决了我对如何重新打开表单的疑问,因此选择了它=)
    【解决方案2】:

    当表单关闭时,对象内创建的所有资源都将关闭并释放表单。

    如果您想重用 Window 实例,请改用 StylesDialog.Hide() 函数。

    【讨论】:

    • 但是,hide 会再次调用 Form_Load() 事件吗?直觉上,我想这就像让它不可见但不关闭。
    • 我没有测试它,但我想当你再次调用 Show 时不会调用 Form_Load()。
    • 隐藏然后显示表单不会引发 Load 事件。如果您有需要再次调用的初始化代码,可以将其从 Form_Load 方法中删除并放入另一个方法并显式调用。
    • 这就是 Hide 函数所做的,它将表单可见性设置为 false。如果您调用 Close,您将无法重新打开表单的相同实例,因为它已被处理。
    猜你喜欢
    • 2021-11-22
    • 1970-01-01
    • 2019-01-15
    • 2020-12-27
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多