2014-01-25 26 views
1

如果条件不满足,我需要显示一个消息框然后停止我的程序,我该怎么做?如果条件不符合,停止应用程序启动

现在我有这样的:

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(); 
} 

但是当我运行它,新的窗口闪烁很简单,程序关闭。

回答

2

我没有表现出一个新的对话框,我刚刚从关闭的MainForm了下他们,如果他们没有被授权。 This.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 
    } 
} 
+0

谢谢,这个工程。 – user2705775

1

你在调用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 
    //... 
+0

通过对话框闪烁,我的意思是“new dialog.ShowDialog();”。我应该说得更好。 – user2705775

+0

这似乎不是需要是/否确认的消息类型。 –

1

使用一个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(); 
    } 
} 

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

+0

当我使用else语句时,表单会短暂闪烁。我怎样才能隐藏它? – user2705775

+0

@ user2705775使用具有特定条件的elseif –

1

您不想处理启动窗体的Load事件,因为启动窗体已在该阶段显示。你想把代码放在你的Main方法中,这是创建启动表单的地方。以下是主要方法,在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()); 
     } 
    } 
} 

您只需环绕那些三行代码的“if”语句。 Application.Run调用会阻塞,直到它传递的表单关闭,此时Main方法完成并且您的应用程序退出。如果您没有进行该Application.Run调用,那么Main方法会立即完成,并且应用程序会关闭而无需创建,而不必介意显示一个启动窗体。

+0

谢谢,我会尽力回复你。 – user2705775

+0

我不认为我能做到这一点,因为我的情况依赖主窗体上的COM端口。 – user2705775

+0

我从来没有惹过Program类,不是我不能,只是从来没有任何我在其他地方无法完成的事情。 – wruckie

1

用途:

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(); 
    } 
} 
+0

当我使用else语句时,表单会短暂闪烁。我怎样才能隐藏它? – user2705775

相关问题