我需要显示一个消息框,然后在不满足条件时停止我的程序,我该怎么办?
现在我有这个:
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();
}
但是当我运行它时,新窗口会短暂闪烁并且程序关闭。
答案 0 :(得分:2)
我没有显示新的对话框,如果未经授权,我只需将主要表格从它们下面关闭。 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
}
}
答案 1 :(得分:1)
您正在调用Application.Exit();在显示对话框之后,无需等待对话结果返回您。这就是为什么它闪烁而消失。
试试这个。
DialogResult result = MessageBox.Show("Condition not met. Program will now close!", "Confirmation", messageBoxButtons.YesNoCancel);
if(result == DialogResult.Yes)
//...
else if (result == DialogResult.No)
//...
else
//...
答案 2 :(得分: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
方法。
答案 3 :(得分:1)
您不希望处理启动表单的Load事件,因为启动表单已在该阶段显示。您希望将代码放在Main方法中,这是创建启动表单的位置。以下是Program.cs文件中的Main方法默认情况下的样子:
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方法立即完成,应用程序关闭,而不用创建,更不用说显示启动表单了。
答案 4 :(得分: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();
}
}