2010-10-12 14 views
5

Tengo un botón btnOK en mi formulario, con una propiedad DialogResult de OK. La propiedad AcceptButton del formulario se establece en btnOK. Entonces, si hago clic en el botón, el formulario se cierra automáticamente.C#: ¿Cómo cancelar la acción de cerrar para un botón que está configurado como el botón Aceptar o Cancelar en un formulario?

Ahora, dentro del método btnOK_Click(), quiero poder cancelar la acción cerrada, p. si hubo un error, quiero mostrar un cuadro de mensaje y no cerrar el formulario.

¿Cómo lo hago?

Respuesta

6

OMI simplemente no se tiene que fijar DialogResult propiedad en el botón, pero configurarlo directamente en su forma en el caso btnOK_Click:

private void btnOK_Click(object sender, EventArgs e) 
{ 
    if (yeahLetsClose) 
     this.DialogResult = DialogResult.OK; // form will close with OK result 
    // else --> form won't close... 
} 

Por cierto, AcceptButton propiedad está relacionada con la tecla ENTER (cuando presione en su formulario, se presionará AcceptButton)

1

Agregue un controlador de eventos para el evento close de formulario. El parámetro EventArgs debe tener una propiedad Cancelar.

+0

Eso funcionará, pero es kludgy - requiere el establecimiento de una bandera en el evento de clic, que luego se lee en el acto de clausura. Si esa es la única manera, está bien, pero estaba buscando algo un poco menos de solución ... –

+0

Es eso o cambiar cómo funcionan los botones para que el proceso se cierre o no se cierre manualmente y no confíe en las cosas automáticas de AcceptButton. – asawyer

8

En complemento de error:

this.DialogResult = DialogResult.None 
Cuestiones relacionadas