You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ShowDialog返回后是否可访问窗体及其中成员?

ShowDialog返回后是否可访问窗体及其中成员?

嘿,我来给你掰扯清楚这个问题!看你用了工厂方法+using的方式处理模态窗体,刚好踩中了「窗体生命周期」的关键点,咱们一步步说:

  • 在using代码块内:完全可以正常访问
    当ShowDialog()返回后,只要还没跳出using的大括号,你的窗体实例f还没被自动调用Dispose()方法回收资源。这时候不管是窗体自身的成员(比如你写的Foo()方法、Bar属性),还是里面的Label这类控件,都能正常读取访问。而且因为你的静态方法ShowMyForm和这些私有成员同属MyForm类,哪怕Foo和Bar是private修饰的,也能直接调用,完全合法。比如你可以把代码补成这样:

    public static bool ShowMyForm(out string s, out int i)
    {
        using (MyForm f = new MyForm())
        {
            bool ok = f.ShowDialog() == DialogResult.OK;
            // 这里调用私有方法、读取私有成员都没问题
            s = f.Foo();
            i = f.Bar;
            return ok;
        }
    }
    
  • 跳出using代码块:绝对不能再访问
    一旦离开using块,.NET会自动执行f.Dispose(),把窗体和内部控件的所有资源都释放掉。这时候如果还持有f的引用并试图访问它的成员或控件,十有八九会触发ObjectDisposedException——毕竟对象已经被「销毁回收」了,自然不能再用。

要是你的需求就是关闭模态窗体后提取上面的用户输入或控件数据,直接把所有读取逻辑放在using块内部完成就好,既安全又符合.NET的资源管理规范。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:29:32