2016-08-23 93 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