我正在开发一个程序,点击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未被删除。对象引用未设置为对象的实例。
答案 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();
}