Открытие новой формы без знания ее System.Type во время компиляции и обработки ObjectDisposedException - PullRequest
1 голос
/ 11 июля 2020

У меня возникла проблема при попытке предотвратить исключение ObjectDisposedException после закрытия одной из форм с помощью кнопки Windows закрытия.

У меня есть метод, который отвечает за открытие форм, и он работает пока я не пытаюсь открыть "удаленную" форму, поэтому я попытался использовать блок 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();
            }
        }
    }

1 Ответ

2 голосов
/ 11 июля 2020

Предполагая, что вы никогда не передаете 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();
    }            
}
...