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

Fra*_*yer 2 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();
Run Code Online (Sandbox Code Playgroud)

错误:NullReferenceException未被覆盖.你调用的对象是空的.

Han*_*ant 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");
            }
        }
Run Code Online (Sandbox Code Playgroud)