为什么在表单关闭之前显示消息框?
SomeForm myForm = new SomeForm();
myForm.Show();
MessageBox.Show("Some text");
我是否需要启动一个新线程,并等待它完成?我以前从未遇到过这个问题。
答案 0 :(得分:5)
您需要使用Form.ShowDialog()代替。 Form.Show显示一个无模式窗口,而Form.ShowDialog显示一个模态形式,即用户必须在继续之前关闭。
答案 1 :(得分:1)
您的示例实际上从未关闭myForm
...仅显示它。我希望上面的代码显示myForm
,然后立即显示MessageBox
。
如果您希望在显示MessageBox之前关闭myForm
,则需要在某个时候调用myForm.Close()
。
答案 2 :(得分:1)
原因是myForm.Show();
开始打开一个新窗口,但它不是阻塞调用。它不是一个对话框,它是一个单独的窗口,它自己运行。
如果您希望SomeForm显示为Dialog(阻止窗口,等待close继续执行),则使用ShowDialog
。如果要在显示MessageBox之前等待窗口打开,则将MessageBox添加到SomeForm claa上的OnLoaded。
答案 3 :(得分:1)
如果在显示其他表单时用户无法与主表单进行交互非常重要,那么您可以使用myForm.ShowDialog
代替Show
。 ShowDialog
是一个阻止函数,因此在其他表单关闭之前不会返回。另一方面,Show
只显示另一个表单,然后立即返回,而不等待表单关闭。
如果故意不以模态方式显示其他表单,并且您没有(或者不能)进行更改,那么您可以使用事件来显示消息框另一种形式是封闭的。
SomeForm myForm = new SomeForm();
myForm.FormClosed += (form, args) =>
{
MessageBox.Show("Some text");
};
myForm.Show();
这将添加一个事件处理程序,在关闭另一个表单时触发,并在适当的时间执行所需的代码。