【问题标题】:How do I unload all open forms in VB.NET?如何在 VB.NET 中卸载所有打开的表单?
【发布时间】:2009-02-26 07:24:59
【问题描述】:

在将 VB6 代码转换为 VB.NET 的过程中,我需要替换以下旨在关闭应用程序中剩余的所有打开表单的代码。

'close all sub forms
For i = My.Application.OpenForms.Count - 1 To 1 Step -1
    'UPGRADE_ISSUE: Unload Forms() was not upgraded. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="875EBAD7-D704-4539-9969-BC7DBDAA62A2"'
    Unload(My.Application.OpenForms(i))
Next i

我已将Unload 函数替换为Close(如TFM 所示),但编译器抱怨OpenForms 不是My.Application 的成员。

我在哪里可以访问打开的表单?

【问题讨论】:

    标签: vb.net winforms visual-studio-2008 vb6 vb6-migration


    【解决方案1】:

    OpenForms 属性返回 FormCollection。您可以遍历集合以处理所有表单。

    For each f as Form in My.Application.OpenForms
     f.Close()
    Next
    

    【讨论】:

    • 很奇怪,我看到很多人说这在 VS 2005 中对他们有用。我的编译器拒绝承认 OpenForms (VS 2008)... 可以在两个版本之间进行更改吗??
    • 刚在VB2008 EXpress版试了一下。它对我有用 - 完全按照锡上所说的那样做
    • 我看不出它没有理由不工作。您的编译器会引发什么错误?
    • 执行此操作时有时会收到一个集合修改异常。
    【解决方案2】:

    我发现了这个解决方案,

    'close all sub forms
    For i = System.Windows.Forms.Application.OpenForms.Count - 1 To 1 Step -1
        Dim form As Form = System.Windows.Forms.Application.OpenForms(i)
        form.Close()
    Next i
    

    ...看起来不错(如果不是冗长的话),我将能够在编译其他所有内容后立即对其进行测试..

    【讨论】:

    • 这是另一种应用 for-each 的方式(对于大量迭代,性能略有差异)。
    • 你可以只使用Application.OpenForms,因为通常你有'Imports System.Windows.Forms'。
    • 啊……这就是我所缺少的,导入!
    • 当 Imports System.Windows.Forms 没有时,这在 VS2010 中对我有用
    • 谢谢,这对我来说比 For each 方法更好,因为 .close 修改了它正在迭代的集合。
    【解决方案3】:

    Application.Exit 也差不多。

    如果所有表单都关闭,我想你还是想关闭应用程序。

    【讨论】:

    • 拔掉电源插头也能达到预期的效果。别介意一些副作用...... :-)))
    • 调用 Application.Exit 方法退出应用程序时,不会引发 Form.Closed 和 Form.Closing 事件。如果您在其中任何一个事件中有必须执行的验证代码,则应在调用 Exit 方法之前分别为每个打开的表单调用 Form.Close 方法。
    • 另外,如果您想让用户回到登录屏幕,如果他们可能会执行诸如点击注销之类的操作,您可能希望卸载所有表单但不退出应用程序。
    【解决方案4】:

    My.Application.OpenForms 需要 VB.Net 应用程序才能使用应用程序框架(请参阅项目属性、应用程序、启用应用程序框架)。

    如果您不使用应用程序框架,则可以改用 Application.OpenForms(来自 System.Windows.Forms 命名空间)。

    【讨论】:

      【解决方案5】:

      查看Application.Windows 属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-06
        • 1970-01-01
        • 2015-09-08
        • 2017-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-11
        相关资源
        最近更新 更多