Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在编译和处理ObjectDisposedException时打开新窗体,而不知道其System.Type_C#_Visual Studio_Winforms - Fatal编程技术网

C# 在编译和处理ObjectDisposedException时打开新窗体,而不知道其System.Type

C# 在编译和处理ObjectDisposedException时打开新窗体,而不知道其System.Type,c#,visual-studio,winforms,C#,Visual Studio,Winforms,在使用Windows关闭按钮关闭其中一个窗体后,我在尝试防止ObjectDisposedException时遇到了和问题 我有一个方法负责打开表单,它一直工作到我试图打开“disposed”表单为止,所以我尝试使用try-catch块来处理它,尽管之后无法掌握如何显示表单 public void FormCheck (Form form) { bool isOpen = false; FormCollection fc = Application.Open

在使用Windows关闭按钮关闭其中一个窗体后,我在尝试防止ObjectDisposedException时遇到了和问题

我有一个方法负责打开表单,它一直工作到我试图打开“disposed”表单为止,所以我尝试使用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();
            }
        }
    }

假设您从未将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();
    }            
}