1

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

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

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

4

4 回答 4

5

您需要改用Form.ShowDialog()。Form.Show 显示一个非模式窗口,而 Form.ShowDialog 显示一个模式窗体,即用户必须关闭才能继续。

于 2012-09-28T15:52:43.480 回答
1

如果在显示其他表单时用户无法与主表单交互很重要,那么您可以myForm.ShowDialog使用Show. ShowDialog是一个阻塞函数,所以在另一个表单关闭之前它不会返回。 Show,另一方面,只显示另一个表单,然后立即返回,而无需等待表单关闭。

如果故意不以模态方式显示另一个表单,并且您没有(或不能)进行更改,那么您可以使用事件在另一个表单关闭时显示一个消息框。

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

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

于 2012-09-28T16:05:31.943 回答
1

这样做的原因是myForm.Show();开始打开一个新窗口,但它不是阻塞调用。它不是一个对话框,它是一个单独的窗口,它自己运行。

如果您希望 SomeForm 显示为 Dialog(阻塞窗口,等待关闭以继续执行),请使用ShowDialog. 如果要等到窗口打开再显示 MessageBox,则将 MessageBox 添加到 SomeForm claa 上的 OnLoaded。

于 2012-09-28T15:56:01.150 回答
1

您的示例从未真正关闭myForm...仅显示它。我希望上面的代码显示myForm然后立即显示MessageBox.

如果您想myForm在显示 MessageBox 之前关闭,您需要myForm.Close()在某个时候调用。

于 2012-09-28T15:53:18.443 回答