如何避免退出确认?

How to avoid an exit confirmation?

我想做的事情很简单,但我不知道怎么做。我正在做一个基本的 window 登录,我写了一个代码在退出前要求确认,就像这样:(我有西班牙语的名字,如果你不明白,"Contador" 是计数器)

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult dialogo = MessageBox.Show("¿Desea cerrar la aplicación?", 
       "Aviso!", MessageBoxButtons.YesNo, MessageBoxIcon.Hand);
    if (dialogo == DialogResult.No)
    {
        e.Cancel = true;
    }
}

之后我做了一个计数器,如果我输入错误信息三次,应用程序将关闭,代码如下:

private int Contador;
private void Form1_Load(object sender, EventArgs e)
{
    Contador = 0;
    aceptar.Enabled = false;
    usuario.MaxLength = 40;
    contraseña.MaxLength = 10;            
}    

private void aceptar_MouseClick(object sender, MouseEventArgs e)
{
   if(Contador == 2)
    {
        DialogoCerrar();
        Close();
    } 
   if (usuario.Text == ("Demo") && (contraseña.Text == ("ABC123")))
    {
        Contador = 0;
        DialogResult dialogo = MessageBox.Show(
          "Ingreso exitoso!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    else
    {
        DialogResult dialogo = MessageBox.Show(
           "Datos incorrectos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
        Contador++;
    }                   
}

所以,这行得通,但是当我输入了 3 次错误信息后,在关闭程序之前询问我是否要这样做(我知道那是为了 Form1_FormClosing),我希望程序在那种情况下不会询问它。

你只需要设置一个标志:

private bool _noConfirmExit;

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (_noConfirmExit)
    {
        return;
    }

    DialogResult dialogo = MessageBox.Show("¿Desea cerrar la aplicación?", "Aviso!", MessageBoxButtons.YesNo, MessageBoxIcon.Hand);
    if (dialogo == DialogResult.No)
    {
        e.Cancel = true;
    }
}

private void aceptar_MouseClick(object sender, MouseEventArgs e)
{
    if(Contador == 2)
    {
        _noConfirmExit = true;
        DialogoCerrar();
        Close();
    } 

    if (usuario.Text == ("Demo") && (contraseña.Text == ("ABC123")))
    {
        Contador = 0;
        DialogResult dialogo = MessageBox.Show("Ingreso exitoso!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);

    }
    else
    {
        DialogResult dialogo = MessageBox.Show("Datos incorrectos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
        Contador++;
    }
}

这样,您的 FormClosing 事件处理程序就可以区分因其他原因关闭和因计数器达到限制而关闭。

这是跟踪您是否应该显示警告对话框的代码。它基本上是您不想显示对话框时设置的标志。

    public partial class Form1 : Form
    {
        private bool SkipWarning = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if(!SkipWarning)
            {
                DialogResult dialogo = MessageBox.Show("¿Desea cerrar la aplicación?", "Aviso!", MessageBoxButtons.YesNo, MessageBoxIcon.Hand);
                if (dialogo == DialogResult.No)
                {
                    e.Cancel = true;
                }
            }
        }

        private void aceptar_MouseClick(object sender, MouseEventArgs e)
    {
       if(Contador == 2)
        {
            SkipWarning = true;
            DialogoCerrar();
            Close();
        } 
       if (usuario.Text == ("Demo") && (contraseña.Text == ("ABC123")))
        {
            Contador = 0;
            DialogResult dialogo = MessageBox.Show("Ingreso exitoso!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }

        else
        {
            DialogResult dialogo = MessageBox.Show("Datos incorrectos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            Contador++;
        }                   
      }
    }