2016-08-23 4 views
0

то, что я хочу сделать, просто, но я не знаю, как это сделать. Я делаю вход в базовое окно, и я написал код для запроса подтверждения перед выходом, например: (у меня есть имена на испанском языке, «Контадор» - это счетчик, если вы не понимаете)Как избежать подтверждения на выход?

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), a и я хочу, чтобы программа не спрашивала об этом в этой ситуации.

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^