2012-02-10 23 views
8

Dos preguntas aquí, espero que esté bien.MessageBoxResult vs. DialogResult

En primer lugar, y principalmente, estoy tratando de avisar al usuario cuando salen de mi aplicación, independientemente de si realmente quieren salir. Mi código es el siguiente:

private void exitToolStrip_Click(object sender, EventArgs e) 
{ 
    DialogResult mBoxResult = MessageBox.Show("Would you like to exit the program?", "Exit Program", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
    switch (mBoxResult) 
    { 
     case DialogResult.Yes: 
      this.Close(); 
      break; 
     case DialogResult.No: 
      break; 
    } 
} 

Según MSDN, que debería usar en lugar de MessageBoxResult mBoxResultDialogResult mBoxResult.

Estoy usando .NET Framework 3.5. Leí here que pre-3.0 debería usar DialogResult, pero si estoy usando 3.5, ¿no debería funcionar MessageBoxResult?

Cuando trato de llamarlo, me sale

El tipo o espacio de nombres MessageBoxResult no se puede conocer (son le falta una directiva using o una referencia de ensamblado?).

Sin embargo, funciona bien cuando uso DialogResult. ¿Por qué es esto?

Mi segunda pregunta es con respecto a este pedazo de código:

case DialogResult.No: 
break; 

Si alguien golpea el botón Cancel en el diálogo, ¿sería adecuado para poner algo allí además de la ruptura? ¿O todo funcionará bien sin eso?

+0

Simplemente use DialogResult y asegúrese de establecer el tipo de resultado de cada botón para que se capture/devuelva correctamente ... algo muy simple de verificar – MethodMan

Respuesta

10

DialogResult es para WinForms. MessageBoxResult es para SilverLight.

Solo la declaración break está bien para el caso No. Pero usar una instrucción switch es exagerado aquí. if (response == yes) Close(); sería suficiente.

Sin embargo, tenga en cuenta que esta no es una forma ideal de hacer lo que quiere. ¿Qué ocurre si el usuario hace clic en el botón Cerrar en el borde de la ventana o presiona ALT + F4? En su lugar, se debe controlar el evento FormClosing:

private void MyForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (MessageBox.Show("Would you like to exit the program?", "Exit Program", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) 
     e.Cancel = true; 
} 

Al establecer e.Cancel a true, se cancela el cierre de la forma. Al no hacer nada, permite que la forma se cierre.

7
  • Uso DialogResult si su aplicación es una aplicación de Windows Forms
  • Uso MessageBoxResult si su aplicación es un WPF/aplicación de Silverlight

Como se puede ver, los espacios de nombres son diferentes: System.Windows.Forms (Winforms) vs System.Windows (WPF).

Cuestiones relacionadas