首页 > 解决方案 > 打开新表单,在编译和处理 ObjectDisposedException 时不知道它的 System.Type

问题描述

在使用 Windows 关闭按钮关闭其中一个表单后尝试阻止 ObjectDisposedException 时,我遇到了问题。

我有一个负责打开表单的方法,它一直有效,直到我试图打开“已处置”的表单,所以我尝试使用 try-catch 块来处理它,但仍然无法显示如何显示之后形成。

public void FormCheck (Form form)
    {
        bool isOpen = false;
        FormCollection fc = Application.OpenForms;
        foreach (Form frm in fc)
        {
            if (frm.Name == form.Name)
            {
                form.Focus();
                isOpen = true;
                break;
            }
        }
        if (isOpen == false)
        {
            try
            {
                form.Show();
            }
            catch(ObjectDisposedException)
            {
                Type formType = form.GetType();
                object instance = Activator.CreateInstance(formType);
                form.Show();
            }
        }
    }

标签: c#visual-studiowinforms

解决方案


假设您从未将 null 传递给该方法(您也可以检查它):

public void FormCheck(Form form)
{
    foreach (Form frm in Application.OpenForms)
    {
        if (frm.Name == form.Name)
        {
            form.Focus();
            return;
        }
    }
    if (!form.IsDisposed)
    {
        form.Show();
    }
    else
    {
        ((Form)Activator.CreateInstance(form.GetType())).Show();
    }            
}

推荐阅读