在构造函数中退出MessageBox调用上的应用程序

时间:2012-05-15 13:07:08

标签: c# winforms

我想在实际表单之前显示一个对话框(消息框),如果用户选择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()

上有一个例外

有什么问题?知道这样做的最佳方法是什么?

4 个答案:

答案 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尚未被调用)。
因此,在应用程序的唯一表单构造函数中调用该方法没有多大意义。