2012-02-10 9 views
8

Due domande qui, spero che sia OK.MessageBoxResult vs. DialogResult

In primo luogo, e principalmente, sto cercando di chiedere all'utente quando esce dalla mia domanda, indipendentemente dal fatto che vogliano davvero uscire. Il mio codice è il seguente:

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

Secondo MSDN, dovrei usare MessageBoxResult mBoxResult piuttosto che DialogResult mBoxResult.

Sto usando .NET Framework 3.5. Ho letto here che pre-3.0 dovrebbe utilizzare DialogResult, ma se sto utilizzando 3.5, non dovrebbe funzionare MessageBoxResult?

Quando provo a chiamarlo, ottengo

Il tipo o dello spazio dei nomi il nome non è stato trovato MessageBoxResult (sono si manca un un riferimento all'assembly direttiva using o?).

Tuttavia, funziona correttamente quando utilizzo DialogResult. Perchè è questo?

La mia seconda domanda è per quanto riguarda questo pezzo di codice:

case DialogResult.No: 
break; 

Se qualcuno preme il pulsante Cancel nella finestra di dialogo, sarebbe corretto mettere niente in là, oltre la pausa? O funzionerà tutto senza di esso?

+0

Basta usare DialogResult e accertarsi di impostare il tipo di risultato di ciascun pulsante in modo che sia correttamente catturato/restituito .. molto semplice da controllare – MethodMan

risposta

10

DialogResult è per WinForms. MessageBoxResult è per SilverLight.

Solo la dichiarazione break va bene per il caso No. Ma usare una dichiarazione switch è eccessivo qui. if (response == yes) Close(); sarebbe sufficiente.

Si noti tuttavia che questo non è un modo ideale per fare ciò che si desidera. Cosa succede se l'utente fa clic sul pulsante di chiusura sul bordo della finestra o preme ALT + F4? Invece, si dovrebbe gestire l'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; 
} 

Impostando e.Cancel a true, si annulla la chiusura del modulo. Non facendo nulla, si consente al modulo di chiudersi.

7

Come si può vedere, gli spazi dei nomi sono diversi: System.Windows.Forms (WinForms) vs System.Windows (WPF).

Problemi correlati