2009-02-12 12 views
14

Suponiendo que el código:.NET: ¿Cómo hacer que Escape cierre un MessageBox.Show()?

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); 

alt text http://i41.tinypic.com/rayots.jpg

Si el usuario presiona escape, lo quiero para cerrar el cuadro de mensaje, y el método Show() puedo volver DialogResult.None.

pregunta relacionada: ¿Cómo puedo activar la "X" en la esquina superior derecha de un MessageBox.Show para que el usuario abortar?


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

Algo así como la forma permite un diálogo de confirmación de Internet Explorer pulsa escape a la interrupción.

Algo así como la forma permite un diálogo de confirmación de Outlook que se pulsa escape para abortar.

Algo así como la forma en todos los diálogos en la historia del universo deja escapar el usuario pulse o haga clic en X, con el fin de decir:

"No tengo la más remota idea de lo que estás pidiéndome , por favor no rompa mi computadora ".


From the Vista UX Guidelines

Uso botones Sí y no sólo para responder a las preguntas de sí o no. La instrucción principal debe ser naturalmente expresaron como un sí o un no. Nunca use OK y Cancel para sí o no preguntas.

Respuesta

3

No creo que esto es posible, aunque el equivalente típica está especificando una de las MessageBoxButtons banderas con Cancelar (específicamente YesNoCancel en su caso).

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

+0

Aceptado por "no posible" –

12

Tiene que activar la opción "Cancelar" con el valor de enumeración "MessageBoxButtons.YesNoCancel"

Esto devolverá DialogResult.Cancel

+0

o MessageBoxButtons.OKCancel – Powerlord

+0

Excepto que cancelar no es una respuesta válida a la pregunta "¿Estás seguro de que quieres ..." –

+0

... y escapar no es una respuesta válida a "Sí o No?" –

1

Sospecho que si se incluyen MessageBoxButtons.YesNoCancel, por defecto Escape está conectado para cancelar, lo que devolverá un MessageBoxResult de Cancelar.

+0

¿Qué significa si el usuario marca "No" en "Cancelar"? –

+0

No y Cancelar significan esencialmente lo mismo en este caso. YesNoCancel es apropiado para cosas como "¿Desea guardar los cambios en su documento antes de cerrar HelloWorld?" Sí: ahorre por favor. No: cerrar sin guardar. Cancelar: no cierre ni guarde, solo regrese. – JMD

+1

¡Pero ambos esencialmente hacen lo mismo, es por eso que queremos una opción de escape! ¡No sé por qué Microsoft lo echa de menos! Y ahora, incluso si No y cancelar significan cosas diferentes, ¿por qué no puedo escapar de un diálogo de YesNo? Lancé uno de los míos para enfrentar este problema. – nawfal

1

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 en cuanto a qué acción tomaron simplemente presionando la tecla de escape.

Como ya se ha mencionado la adición de un botón "Cancelar" creará automáticamente el efecto deseado.

+0

Escape significa, "Oh mierda, no quise hacer eso, fingir que no hice lo que hice que hizo que esto apareciera". –

1

Creo que MessageBox (ambos en WinForms y 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.

1

Parece que MessageBoxButtons.OkCancel es lo que estás buscando, simplemente estás pendiente de que la pregunta no coincida 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 consiste en formular 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); 

sólo un ejemplo, pero probablemente es la solución más sencilla a su dilema.

+1

Facilidad de uso vs facilidad de uso. Hmmm –

Cuestiones relacionadas