我想在实际表单之前显示一个对话框(消息框),如果用户选择no,则应该完全关闭应用程序。我正在尝试使用下面的代码,但即使点击“否”,也会显示表单!
public Form1()
{
InitializeComponent();
if (MessageBox.Show("Contiue or not", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button1) == DialogResult.No)
Application.Exit();
}
我也试过了this.Clsoe
,但后来我Application.Run()
有什么问题?知道这样做的最佳方法是什么?
答案 0 :(得分:5)
如何将其放入Program.cs
(假设您要确定是否启动应用)
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (
MessageBox.Show(
"Contiue or not", "Question",
MessageBoxButtons.YesNo,
MessageBoxIcon.None,
MessageBoxDefaultButton.Button1) == DialogResult.Yes)
Application.Run(new Form1());
}
答案 1 :(得分:1)
在program.cs中执行此操作,如下所示:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (MessageBox.Show("Contiue or not", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
Application.Run(new Form1());
答案 2 :(得分:1)
在OnLoad
事件中显示您的消息框,而不是构造函数,例如:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (MessageBox.Show("Contiue or not", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button1) == DialogResult.No)
{
Application.Exit(); // or this.Close();
}
}
Application.Exit()
在构造函数中不起作用,因为还没有任何形式,因此,没有消息泵停止。
另外this.Close()
会引发错误,因为它会导致在表单上调用Dispose()
;在Application.Run
尝试显示表单后立即执行,但它被处理掉并引发异常。
答案 3 :(得分:1)
不要在构造函数中执行类似的操作。在创建之前,您应该知道是否要创建对象。如果你想在实际表单之前显示MessageBox,那么在调用构造函数之前显示它,就像调用Application.Run()
之前一样。
Application.Exit()
尝试终止所有消息泵,但它们尚未启动,因为Application.Run()
启动它们。
另外Application.Exit()
关闭了应用程序的所有窗口,但还没有,因为您的Form1
尚未构建。
您尝试在应用程序甚至有机会开始运行之前退出应用程序(Run
尚未被调用)。
因此,在应用程序的唯一表单构造函数中调用该方法没有多大意义。