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

我正在开发一个程序,点击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未被删除。 你调用的对象是空的。

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

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

最后一行应该是:

 Form1.Show(); 

这条线

 Form1.ActiveForm.Show(); 

应该

 Form1.Show(); 

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

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