visual tipos que net como cierre cerrar automaticamente aceptar .net winforms dialog modal-dialog

.net - tipos - msgbox visual basic



.NET: ¿Cómo hacer para que Escape cierre un MessageBox.Show()? (6)

Asumiendo el código:

MessageBox.Show(this, "Would you like the differential girdle spring on the up-end of the grammeters?", "Smi-Boloid Stater Slots", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

texto alternativo http://i41.tinypic.com/rayots.jpg

Si el usuario presiona Escape , quiero que cierre el cuadro de mensaje, y el método Show() puede devolver DialogResult.None .

Pregunta relacionada: ¿Cómo puedo habilitar la "X" en la esquina superior derecha de un MessageBox. Mostrar que el usuario aborte?

Algo así como un diálogo de confirmación de Windows Explorer le permite presionar Escape para abortar.

Algo así como un diálogo de confirmación de Internet Explorer le permite presionar Escape para abortar.

Algo así como cómo un cuadro de diálogo de confirmación de Outlook te permite presionar Escape para abortar.

Algo así como que cada diálogo en la historia del universo permite al usuario presionar Escape, o hacer clic en X, para decir:

"No tengo la menor idea de lo que me estás preguntando, por favor solo no rompas mi computadora".

De las Directrices de Vista UX

Use los botones Sí y No solo para responder a las preguntas sí o no. La instrucción principal debe expresarse naturalmente como una pregunta de sí o no. Nunca use OK y Cancel para sí o no preguntas.


Además de las otras respuestas, es una mala práctica permitirle a un usuario cerrar un diálogo con escape a menos que muestre un botón "Cancelar" ya que esto difiere del comportamiento predeterminado que los usuarios esperan de las aplicaciones de Windows y puede ser incierto sobre qué acción simplemente tomaron presionando la tecla de escape.

Como ya se mencionó, al agregar un botón "Cancelar" se creará automáticamente el efecto deseado.


Creo que MessageBox (tanto el de WinForms como el de WPF) es uno de esos componentes que están mejor redefinidos. Su comportamiento es tan rígido que cualquier tipo de refactorización es casi imposible. En resumen, hazlo tu mismo, de esa forma puedes tener el escape cerca, y cualquier otra cosa que puedas necesitar.

Hay un proyecto en CodePlex llamado InfoBox que podría ser útil para usted.


Debe habilitar la opción "Cancelar" con el valor enum "MessageBoxButtons.YesNoCancel"

Esto devolverá DialogResult.Cancel


Parece que MessageBoxButtons.OkCancel es lo que estás buscando, simplemente te cuelga el hecho de que la pregunta no coincide con Ok / Cancel.

En teoría, podría escribir su propio formulario MessageBox que haga lo mismo y asocie No con la tecla Escape, que lograría exactamente lo que desea, con un poco de trabajo adicional.

Otra opción es reformular su pregunta, por ejemplo:

MessageBox.Show(this, "The following operation will format your computer./r/nPress Ok to continue, Cancel to abort", "Confirm Format", MessageBoxButtons.OkCancel, MessageBoxIcon.Warning);

Solo un ejemplo, pero es probable que sea la solución más simple a su dilema.


Sospecho que si incluye MessageBoxButtons.YesNoCancel, de manera predeterminada, Escape está conectado para cancelar y devolverá un MessageBoxResult de Cancel.


No creo que esto sea posible, aunque el equivalente típico es especificar uno de los indicadores de MessageBoxButtons con Cancelar (específicamente YesNoCancel en su caso).

Sería bastante sencillo recrear su propia función MessageBox con esta función, si realmente la quiere, aunque realmente Cancel hace el trabajo.