2009-04-24 14 views
6

Disculpe si esta es una pregunta tonta pero soy un principiante aquí.C# Validar antes de dejar el evento accept_button

Tengo un diálogo simplemente personalizado con dos botones: Aceptar y Cancelar. El botón Aceptar es el botón de aceptar del formulario.

Quiero hacer algunas validaciones en el evento Accept_Click y decidir si puedo cerrar el diálogo o no, pero cada vez que deja este método, el diálogo se cierra automáticamente y vuelve a estar bien.

¿Qué puedo hacer para evitar que el diálogo se cierre solo? o tengo que hacer las cosas de otra manera?

gracias

+0

http://stackoverflow.com/questions/4590903/exit-sub-on-dialogresult-ok-button/4591022#4591022 – captonssj

Respuesta

10

que tendría una variable de nivel de formulario (llámese _ vetoClosing) En el evento Click del botón de aceptar, yo correría validación y establecer la variable sobre la base de que:

private void acceptButton_Click(object sender, EventArgs e) 
    { 
     // Am I valid 
     _vetoClosing = !isValid(); 
    } 

Luego, en el caso FormClosing, me cancelaría cerca, si es cierto _vetoClosing

private void Form_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     // Am I allowed to close 
     if (_vetoClosing) 
     { 
      _vetoClosing = false; 
      e.Cancel = true; 
     } 
    } 

Volviendo botón Aceptar fuera no es óptima, ya que perder la funcionalidad Introduzca en Press.

+0

Estoy de acuerdo ... el evento de cierre es la forma de manejar esto. –

0

¿Es la AcceptButton o CancelButton en la forma establecida a ese botón? Si es así, intente desarmarlo y configurar manualmente DialogResult en su controlador cuando desee cerrar el diálogo.

+1

I No quiero hacer eso porque quiero que sea el botón predeterminado cuando presiono Enter – DkAngelito

2

Validaré a medida que cambien los controles, y solo habilitaré el botón Aceptar si todo el formulario es válido.

Esto le permitiría mantener su botón como el botón predeterminado (AcceptButton), pero evitar que esto ocurra.

1

Una solución más limpia sería establecer DialogResult en Ninguno:

private void acceptButton_Click(object sender, EventArgs e) 
{ 
    if (!isValid()) { 
     this.DialogResult = System.Windows.Forms.DialogResult.None; 
    } 
} 
Cuestiones relacionadas