2016-08-23 64 views
0

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

所以,这个工作,但三时后次我把不正确的信息,关闭程序之前问我,如果我想这样做(我知道这是为Form1_FormClosing),一个nd我希望程序在这种情况下不要问它。

回答

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事件处理程序可以告诉收盘因其他原因和关闭之间的区别,因为计数器达到了极限。

+0

非常感谢,它工作得很好! – Santiago

1

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

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

也谢谢你!逻辑与Duniho有些不同,但是又是一个类似的方式,再次坦克! – Santiago