Как обрабатывать объект, расположенный исключение было обработано исключение в C #? - PullRequest
2 голосов
/ 09 сентября 2010

Я работаю в приложении c # windows. У меня есть два окна от имени как form1 и form2.я вызываю form2, нажимая кнопку в form1, но я создаю объект для form2 в конструкторе form1.время form2 показывалось успешно, после этого я закрываю форму2, нажимая кнопку закрытия по умолчанию, и снова нажимаю кнопку. Теперь я получаю объект, исключение было необработанным исключением. Как этого избежать?

Ответы [ 4 ]

2 голосов
/ 09 сентября 2010

Не обрабатывайте исключение, исправьте ошибку в своем коде. Экземпляр формы не работает после закрытия формы, вы не можете показать его снова. Либо напишите это так:

    private void button1_Click(object sender, EventArgs e) {
        var frm = new Form2();
        frm.Show(this);
    }

Или, если вы хотите, чтобы когда-либо был виден только один экземпляр формы:

    Form2 theForm;

    private void button1_Click(object sender, EventArgs e) {
        if (theForm != null) {
            theForm.WindowState = FormWindowState.Normal;
            theForm.BringToFront();
        }
        else {
            theForm = new Form2();
            theForm.FormClosed += delegate { theForm = null; };
            theForm.Show(this);
        }
    }
1 голос
/ 09 сентября 2010

Вы можете использовать события, чтобы сообщить form1, когда form2 была закрыта, и очистить ее ссылку на нее.Тогда form1 не нужно вызывать form2, если она была закрыта.

1 голос
/ 09 сентября 2010

Вы сохраняете ссылку на объект (окно здесь), но закрываете его. Объект утилизирован, но не мусор. Ваша ссылка здесь недействительна, поскольку объект утратил работоспособное состояние.

Вам нужно спрятать форму вместо закрытия, если вам нужно ее повторно использовать. Или создайте новый экземпляр, чтобы загрузить его снова.

0 голосов
/ 09 сентября 2010

Мы делаем нечто подобное здесь с несколькими нашими инструментами, которые подключаются к сторонним приложениям. Пример кода ниже:

public class Form1 : Form
{
    private Form2 otherForm;

    private void ActivateForm2_Click(object sender, EventArgs e)
    {
        if (otherForm == null || otherForm.IsDisposed)
        {
            otherForm = new Form2();
            otherForm.FormClosed += new FormClosedEventHandler(otherForm_closed);
        }
        otherForm.Show(this);
    }

    private void otherForm_Closed(object sender, FormClosedEventArgs e)
    {
        otherForm.Dispose();
        otherForm = null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...