Показ / скрытие основной формы в C # - PullRequest
2 голосов
/ 15 января 2011

Я работаю над программой, в которой нажатие кнопки в форме 1 откроет форму 2. Затем я буду скрывать form1, пока form2 не закроется. У меня проблема в том, что я не могу отобразить form1 после закрытия form2. Есть идеи как это исправить?

        try
        {
            Form1.ActiveForm.Hide();
            AddGradeForm = new Form2(Form.NumberOfSelections);
            AddGradeForm.ShowDialog();
            MessageBox.Show(AddGradeForm.Result.ToString());
        }
        catch (Exception i)
        {
            Form1.ActiveForm.Hide();
            AddGradeForm.Dispose();
            AddGradeForm = new Form2(Form.NumberOfSelections);
            AddGradeForm.ShowDialog();
            MessageBox.Show(AddGradeForm.Result.ToString());
        }
        Form1.ActiveForm.Show();

ОШИБКА: исключение NullReferenceException было удалено. Ссылка на объект не установлена ​​для экземпляра объекта.

Ответы [ 3 ]

6 голосов
/ 15 января 2011

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

        var prior = Form.ActiveForm;
        using (var dlg = new Form2()) {
            dlg.FormClosing += delegate { prior.Show(); };
            prior.Hide();
            if (dlg.ShowDialog() == DialogResult.OK) {
                MessageBox.Show("result");
            }
        }
0 голосов
/ 15 января 2011

Строка

Form1.ActiveForm.Show();

должна быть

Form1.Show();

Также обратите внимание, что она не может быть вызвана, если есть исключение.оберните его в блок finally, если хотите, чтобы он вызывался.

    try
    {
        Form1.ActiveForm.Hide();
        // ...
    }
    catch (Exception i)
    {
        // ...
    }
    finally
    {
        Form1.Show();
    }
0 голосов
/ 15 января 2011

Последняя строка должна быть:

Form1.Show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...