C# 如果不满足条件,则停止启动应用程序

C# 如果不满足条件,则停止启动应用程序,c#,winforms,if-statement,C#,Winforms,If Statement,我需要显示一个消息框,然后停止我的程序,如果条件不满足,我怎么做 现在我有这个: private void MainForm_Load(object sender, EventArgs e){ if(condition == false){ MessageBox.Show("Condition not met. Program will now close!"); Application.Exit(); } new window.ShowD

我需要显示一个消息框,然后停止我的程序,如果条件不满足,我怎么做

现在我有这个:

private void MainForm_Load(object sender, EventArgs e){
    if(condition == false){
        MessageBox.Show("Condition not met. Program will now close!");
        Application.Exit();
    }
    new window.ShowDialog();
}

但当我运行它时,新窗口会短暂闪烁,程序会关闭。

您正在调用Application.Exit();在显示对话框之后,不用等待dialogresult返回给您什么。这就是为什么它会闪烁并消失

试试这个

DialogResult result = MessageBox.Show("Condition not met. Program will now close!", "Confirmation", messageBoxButtons.YesNoCancel);
if(result == DialogResult.Yes)
    //...
else if (result == DialogResult.No)
    //...
else
    //...

您正在调用Application.Exit();在显示对话框之后,不用等待dialogresult返回给您什么。这就是为什么它会闪烁并消失

试试这个

DialogResult result = MessageBox.Show("Condition not met. Program will now close!", "Confirmation", messageBoxButtons.YesNoCancel);
if(result == DialogResult.Yes)
    //...
else if (result == DialogResult.No)
    //...
else
    //...
使用else块:

private void MainForm_Load(object sender, EventArgs e){
    if(condition == false){
        MessageBox.Show("Condition not met. Program will now close!");
        Application.Exit();
    }
    else {
        new dialog.ShowDialog();
    }
}
不会立即退出应用程序。它会导致消息循环结束,但您的代码仍然完成运行
MainForm\u Load
方法。

使用else块:

private void MainForm_Load(object sender, EventArgs e){
    if(condition == false){
        MessageBox.Show("Condition not met. Program will now close!");
        Application.Exit();
    }
    else {
        new dialog.ShowDialog();
    }
}

不会立即退出应用程序。它会导致消息循环结束,但您的代码仍然完成运行
MainForm\u Load
方法。

您不想处理启动窗体的加载事件,因为启动窗体已在该阶段显示。您希望将代码放在主方法中,即创建启动窗体的地方。以下是Program.cs文件中的主方法在默认情况下的外观:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用System.Windows.Forms;
命名空间Windows窗体应用程序1
{
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(新Form1());
}
}
}

您只需围绕这三行代码包装一个“if”语句。Application.Run调用会一直阻塞,直到它传递的表单关闭,此时主方法完成,应用程序退出。如果您不进行该应用程序的.Run调用,则主方法将立即完成,应用程序将关闭,而不会创建启动窗体,更不用说显示启动窗体。

您不想处理启动窗体的加载事件,因为启动窗体已在该阶段显示。您希望将代码放在主方法中,即创建启动窗体的地方。以下是Program.cs文件中的主方法在默认情况下的外观:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用System.Windows.Forms;
命名空间Windows窗体应用程序1
{
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(新Form1());
}
}
}
您只需围绕这三行代码包装一个“if”语句。Application.Run调用会一直阻塞,直到它传递的表单关闭,此时主方法完成,应用程序退出。如果您没有进行该应用程序的.Run调用,则主方法将立即完成,应用程序将关闭,而不会创建启动表单,更不用说显示启动表单了。

使用:

private void MainForm_Load(object sender, EventArgs e){
    if(condition == false){
        MessageBox.Show("Condition not met. Program will now close!");
        Environment.Exit(0);// or Application.Exit();

    } else {
    new dialog.ShowDialog();
    }
}
使用:


我不显示新对话框,我只是在未经授权的情况下关闭主窗体。此.Close立即退出程序

private void MainForm_Load(object sender, EventArgs e)
{
    //some code here
    if (condition == false)
    {
        MessageBox.Show("Condition not met. Program will now close!");
        //i log the user logged in
        this.Close();
    } 
    else 
    {
         //continue to setup the form
    }
}

我不显示新对话框,我只是在未经授权的情况下关闭主窗体。此.Close立即退出程序

private void MainForm_Load(object sender, EventArgs e)
{
    //some code here
    if (condition == false)
    {
        MessageBox.Show("Condition not met. Program will now close!");
        //i log the user logged in
        this.Close();
    } 
    else 
    {
         //continue to setup the form
    }
}

通过对话框闪烁,我指的是“newdialog.ShowDialog();”。我应该用更好的措辞。我所说的对话框闪烁是指“newdialog.ShowDialog();”。我应该用更好的措辞。谢谢,我会尝试一下,然后再回复你。我不认为我能做到这一点,因为我的状态依赖于主窗体上的COM端口。我从不弄乱程序类,也不是说我不能,只是从来没有在其他地方做不到的事情。@user2705775,在这种情况下,我建议将COM端口移出主窗体。将它放在一个类中,您可以在主方法和启动窗体中访问该类。或者,在“if”块外创建启动窗体,检查COM端口,然后只调用应用程序。在“if”块内运行。你可以这样做,如果你设计你的应用程序,你可以这样做。不要写一些代码,然后假设如果代码阻止你做你需要做的事情,那么代码就不会改变。谢谢,我会尝试一下,然后再给你回复。我不认为我能做到这一点,因为我的情况依赖于主窗体上的COM端口。我从来没有弄乱过程序类,但我不能,只是我从来没有在其他地方做不到的事情。@user2705775,在这种情况下,我建议将COM端口移出主窗体。将它放在一个类中,您可以在主方法和启动窗体中访问该类。或者,在“if”块外创建启动窗体,检查COM端口,然后只调用应用程序。在“if”块内运行。你可以这样做,如果你设计你的应用程序,你可以这样做。不要写一些代码,然后假设如果代码阻止你做你需要做的事情,那么代码不会改变。当我使用else语句时,我的表单会短暂闪烁。如何隐藏它?当我使用else语句时,我的表单会短暂闪烁。如何隐藏它?当我使用else语句时,我的表单会短暂闪烁。如何将其隐藏?@user2705775将elseif与特定条件一起使用当我使用else语句时,我的表单会短暂闪烁。如何隐藏它?@user2705775在特定条件下使用elseif