【问题标题】:How to avoid an exit confirmation?如何避免退出确认?
【发布时间】:2016-08-23 03:26:06
【问题描述】:

我想做的很简单,但我不知道该怎么做。我正在做一个基本的窗口登录,我写了一个代码在退出前要求确认,如下所示:(我有西班牙语的名字,如果你不明白,“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;
    }
}

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

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++;
    }                   
}

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

【问题讨论】:

    标签: c# exception counter exit formclosing


    【解决方案1】:

    你只需要设置一个标志:

    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 事件处理程序可以区分因其他原因关闭和因计数器达到其限制而关闭。

    【讨论】:

      【解决方案2】:

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

          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++;
              }                   
            }
          }
      

      【讨论】:

      • 也谢谢你!逻辑和 Duniho 有点不同,不过是另一种相似的方式,再给你灌水!
      猜你喜欢
      • 2013-06-21
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多