在C#中显示/隐藏主窗体

时间:2011-01-15 20:50:49

标签: c# forms

我正在开发一个程序,点击form1上的按钮将打开form2。然后我将隐藏form1,直到form2关闭。我遇到的问题是我无法在form2关闭后显示form1。关于如何解决这个问题的任何想法?

        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 个答案:

答案 0 :(得分:6)

那是因为没有活动形式,你隐藏了一个可能活跃的形式。这有其他副作用,您的应用程序将失去焦点。您需要做的是跟踪以前活动的表单,并在对话框关闭之前再次显示。像这样:

        var prior = Form.ActiveForm;
        using (var dlg = new Form2()) {
            dlg.FormClosing += delegate { prior.Show(); };
            prior.Hide();
            if (dlg.ShowDialog() == DialogResult.OK) {
                MessageBox.Show("result");
            }
        }

答案 1 :(得分:0)

最后一行应该是:

Form1.Show();

答案 2 :(得分:0)

该行

Form1.ActiveForm.Show();

应该是

Form1.Show();

另请注意,如果出现异常,可能无法调用它。如果你想要它被调用,请将它包装在finally块中。

    try
    {
        Form1.ActiveForm.Hide();
        // ...
    }
    catch (Exception i)
    {
        // ...
    }
    finally
    {
        Form1.Show();
    }