【问题标题】:can I reuse an form that has been disposed for multiple forms我可以重复使用已为多个表单处理的表单吗
【发布时间】:2015-02-24 07:10:44
【问题描述】:

我编写了以下代码来重用已处理的表单。但这是硬编码的,仅限于一种形式。我想用它来检查并打开我的应用程序中的所有表单。

    private void CheckMdiChildren(Form frm)
    {
        if (frm.IsDisposed)
        {
            frm = new MembersList();
            frm.Show();
        }
        else
        {
            foreach (Form f in this.MdiChildren)
            {
                if (f.GetType() == frm.GetType())
                {
                    f.Focus();
                    return;
                }
            }
            frm.MdiParent = this;
            frm.Dock = DockStyle.Fill;
            frm.Show();
        }
    }

我正在传递参数frm,它是不同形式的对象,例如。

        this.CheckMdiChildren(mbl);

        this.CheckMdiChildren(exc);

但上面的代码总是打开 MembersList 表单。

我已经为 MainForm 全局声明了以下表单

    ExerciseChart exc = new ExerciseChart();
    MembersList mbl = new MembersList();

当我在本地使用上述声明时,它工作正常。

有什么方法可以让我在多种表单中使用这个功能??

感谢您的快速帮助,请随时询问更多详细信息或代码!

【问题讨论】:

  • 尝试更改您的 CheckMdiChildren() 方法以在参数和对该方法的所有调用中使用“ref”。
  • 很遗憾,这个问题还不够清楚。您提供的代码似乎暗示您的 this 表单是容器,您正在尝试“检查”子表单。是否只允许每种类型的子表格中的一种?调用站点的上下文是什么? mblexc 变量是如何声明的?作为此操作的一部分,您是否还想更新它们的值?太多细节被遗漏了,不知道什么是好的答案。

标签: c# .net winforms forms


【解决方案1】:

Activator.CreateInstance 能够在运行时创建实例。使用您的表单参数作为激活器的类型并将CreateInstance 方法转换为Form

var form = ( Form ) Activator.CreateInstance( frm.GetType() );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2020-05-10
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    相关资源
    最近更新 更多