表单关闭前显示的MessageBox

时间:2012-09-28 15:51:14

标签: c# .net winforms

为什么在表单关闭之前显示消息框?

SomeForm myForm = new SomeForm();
myForm.Show();
MessageBox.Show("Some text");

我是否需要启动一个新线程,并等待它完成?我以前从未遇到过这个问题。

4 个答案:

答案 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代替ShowShowDialog是一个阻止函数,因此在其他表单关闭之前不会返回。另一方面,Show只显示另一个表单,然后立即返回,而不等待表单关闭。

如果故意不以模态方式显示其他表单,并且您没有(或者不能)进行更改,那么您可以使用事件来显示消息框另一种形式是封闭的。

SomeForm myForm = new SomeForm();
myForm.FormClosed += (form, args) =>
{
    MessageBox.Show("Some text");
};
myForm.Show();

这将添加一个事件处理程序,在关闭另一个表单时触发,并在适当的时间执行所需的代码。