visual tutorial studio form c# winforms

studio - windows forms c# tutorial



¿Cómo cerrar un formulario al presionar la tecla de escape? (4)

La mejor manera que encontré es anular la función "ProcessDialogKey". De esta forma, la cancelación de un control abierto sigue siendo posible porque la función solo se invoca cuando ningún otro control utiliza la tecla presionada.

Este es el mismo comportamiento que cuando se establece un CancelButton. El uso del evento KeyDown se activa siempre y, por lo tanto, el formulario se cerrará incluso cuando deba cancelar la edición de un editor abierto.

protected override bool ProcessDialogKey(Keys keyData) { if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape) { this.Close(); return true; } return base.ProcessDialogKey(keyData); }

Tengo un formulario pequeño, que aparece cuando presiono un botón en una aplicación de Windows Forms .

Quiero poder cerrar el formulario presionando la tecla Escape. ¿Cómo podría hacer esto? No estoy seguro del evento para usar (form_closing?)?


Puede establecer una propiedad en el formulario para que lo haga por usted si ya tiene un botón en el formulario que cierra el formulario.

Establezca la propiedad CancelButton del formulario en ese botón.

Obtiene o establece el control de botón en el que se hace clic cuando el usuario presiona la tecla Esc .

Si no tiene un botón para cancelar, necesitará agregar un controlador KeyDown y verificar que la clave Esc KeyDown en esa posición:

private void Form_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { this.Close(); } }

También deberá establecer la propiedad KeyPreview en verdadero.

Obtiene o establece un valor que indica si el formulario recibirá eventos clave antes de pasar el evento al control que tiene el foco.

Sin embargo, como señala Gargo en su answer esto significa que presionar Esc para abortar una edición en un control en el diálogo también tendrá el efecto de cerrar el diálogo. Para evitar eso, anule el método ProcessDialogKey siguiente manera:

protected override bool ProcessDialogKey(Keys keyData) { if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape) { this.Close(); return true; } return base.ProcessDialogKey(keyData); }


Si tiene un botón de cancelación en su formulario, puede establecer la propiedad Form.CancelButton en ese botón y luego presionar ESCOTE efectivamente ''hará clic en el botón''.

Si no tiene dicho botón, consulte la propiedad KeyPreview .


Button cancelBTN = new Button(); cancelBTN.Size = new Size(0, 0); cancelBTN.TabStop = false; this.Controls.Add(cancelBTN); this.CancelButton = cancelBTN;