2009-02-03 7 views
34

¿Cómo obtengo System.Windows.ShowDialog() para devolver 'verdadero'?¿Cómo obtengo System.Windows.ShowDialog() para que devuelva 'verdadero'?

Soy un poco nuevo en esto. El tipo de devolución System.Windows.ShowDialog es bool? Se supone que debe devolver true cuando llegue a Submit y false cuando llegue a Cancel. Pero no estoy seguro de cómo designar qué Button es el botón de envío oficial.

EDIT: En una nota relacionada, tengo curiosidad sobre cómo puede devolver nulo.

Respuesta

36

http://msdn.microsoft.com/en-us/library/system.windows.window.showdialog.aspx

ShowDialog devuelve un Anulable < (De < (T>)>) valor booleano que especifica si se aceptó la actividad o cancelado. El valor de retorno es el valor de la propiedad DialogResult antes de que se cierre una ventana (consulte DialogResult).

Básicamente, usted decide al establecer el valor de DialogResult, no presionando un botón en particular; usted decide qué hace el botón.

+0

Disculpe si esto es redundante o demasiado obvio, pero ¿debería establecer el bool? Valor de DialogResult antes de llamar al método Close() dentro del cuadro de diálogo. De lo contrario, se generaría una excepción InvalidOperationException, con la propiedad Exception.Message establecida en "DialogResult se puede establecer solo después de que se crea Window y se muestra como un cuadro de diálogo." – ClockEndGooner

+0

Tendrás que perdonarme si tengo este error, ya que han pasado años desde que hice WinForms, pero creo que sí, configuraría DialogResult _ (por ejemplo, dentro del controlador OnClick de Button, pero podría ser cualquier mecanismo que sueñe) _, y luego llamar a Close(). – JMD

14

En WPF, establezca la propiedad Button.IsDefault en true para especificar que un botón es el botón "enviar" para una ventana. No estoy 100% seguro de que esto cerrará la ventana con un DialogResult de verdadero. Si no lo hace, sólo tiene que manejar su evento Click de esta manera:

this.DialogResult = true; 

Editar

Del mismo modo, se puede utilizar la propiedad Button.IsCancel tener un botón que sea el botón "Cancelar" para una formar.

Editar 2

Creo que la razón ShowDialog es anulable es que ya que es nula hasta que el formulario se envía o se cancela, se puede probar para que si estuviera viendo el cuadro de diálogo en un subproceso en segundo plano. No lo he intentado, pero parece una razón lógica por la que introducirían un tercer estado "desconocido" (nulo) en la propiedad.

+4

No, establecer IsDefault en true no causará un clic del botón para cerrar el diálogo, sin embargo, IsCancel lo hará. Al establecer DialogResult se cerrará el cuadro de diálogo. Predeterminado en verdadero provoca que el comando se active si el usuario pulsa la tecla Intro. –

6

si establece DialogResult en verdadero ShowDialog devuelve verdadero, si establece DialogResult en falso ShowDialog devuelve falso si el cuadro de diálogo se cierra sin establecer DialogResult (el usuario hace clic en la X roja en la esquina superior derecha) ShowDialog devolverá nulo.

Configuración IsDefault to true hará que el botón se vea un poco diferente y al presionar enter "hará clic" en este botón.

Si configura IsCancel en true, presionar esc hará "clic" en este botón.

+0

Al hacer clic en la X, ShowDialog devolverá falso, no nulo. Creo que solo devuelve nulo, si algo salió mal (si es que lo hizo alguna vez). –

Cuestiones relacionadas