2013-06-30 23 views
12

Vorrei creare un MessageBox che ha /No pulsanti E una casella di controllo.Come mostrare un MessageBox con una casella di controllo?

L'applicazione è un ridimensionatore di immagini e ridimensionerà un numero di immagini contemporaneamente; nel processo controllerà se il nome file della nuova posizione esiste con l'opzione per sovrascriverlo.

Il MessageBox darà all'utente la possibilità di sovrascrivere eventuali nuovi file se lo si desidera, mentre la casella di controllo impedirà dover fare clic x numero di volte, se vogliono sovrascrivere tutti i file.

Come si aggiunge una casella di controllo a una finestra di dialogo MessageBox?

+5

Creare una finestra di dialogo personalizzata. –

+0

Sì, sono d'accordo. La finestra di dialogo personalizzata è la strada da percorrere. Vedi anche: http://social.msdn.microsoft.com/Forums/vstudio/en-US/2fa7e3e3-f55f-4c0d-bcf5-c7278af1d730/how-to-display-a-checkbox-in-message-box – rsbarro

risposta

14

Non è possibile aggiungere una casella di controllo per un MessageBox. Come suggeriscono Tim e rsbarro, dovresti creare una finestra di dialogo personalizzata. La risposta di Tim funzionerà bene e non richiede la creazione di una nuova classe. Se invece vuoi progettare il modulo nel designer, puoi provare questo.

  • Crea un nuovo modulo con i due pulsanti e la casella di controllo che ti servirà.
  • Nella finestra di progettazione form, impostare la proprietà DialogResult del pulsante Sì, e quella del No pulsante per No. Questo ti lascio scoprire ciò che il tasto premuto dall'utente.
  • Creare una proprietà nel modulo che riflette lo stato della casella di controllo (facoltativo - Non mi piace fare riferimento a un controllo su un modulo da un altro modulo, ma se si rende pubblica la casella di controllo, funzionerà anche questo).
public bool DoForAll 
{ 
    get { return checkBox.Checked; } 
} 
  • sul modulo principale, mostrano il form figlio quando necessario. Per esempio:
var options = new Options(); 
var result = options.ShowDialog(); 
if (result == DialogResult.Yes) 
{ 
    var doForAll = options.DoForAll; 
} 
+0

Grazie per la risposta! È stata una scelta difficile tra la tua e la risposta di Tim, ma la tua ha finito per essere un po 'più semplice da progettare visivamente. – TK421

+0

La migliore soluzione ancora! –

16

Creare una finestra di dialogo personalizzata. Qui c'è qualcosa che potrebbe dare un'idea:

public static class CheckboxDialog 
{ 
    public static bool ShowDialog(string text, string caption) 
    { 
     Form prompt = new Form(); 
     prompt.Width = 180; 
     prompt.Height = 100; 
     prompt.Text = caption; 
     FlowLayoutPanel panel = new FlowLayoutPanel(); 
     CheckBox chk = new CheckBox(); 
     chk.Text = text; 
     Button ok = new Button() { Text = "Yes" }; 
     ok.Click += (sender, e) => { prompt.Close(); }; 
     Button no = new Button() { Text = "No" }; 
     no.Click += (sender, e) => { prompt.Close(); }; 
     panel.Controls.Add(chk); 
     panel.SetFlowBreak(chk, true); 
     panel.Controls.Add(ok); 
     panel.Controls.Add(no); 
     prompt.Controls.Add(panel); 
     prompt.ShowDialog(); 
     return chk.Checked; 
    } 
} 

Si può usare in questo modo:

bool overwrite = CheckboxDialog.ShowDialog("overwrite", "Overwrite location?"); 
+0

Cosa succede se abbiamo più checkbox? dite chk1, chk2, chk3 e vogliamo restituire i valori delle caselle di controllo che sono controllate, possiamo avere 2 caselle di controllo alla volta e restituire entrambi i valori. E poi come lo useremo? @Tim –

+0

@silent_programmer usa la risposta di Tim come esempio e aggiunge ulteriori caselle di controllo nel codice. –

0

Try This Uso della classe MsgBoxCheck è semplice come utilizzare il MessageBox di Windows. Innanzitutto, aggiungi un riferimento a MsgBoxCheck.dll nel tuo progetto C#. La maggior parte delle persone invocherà la classe come segue:

MsgBoxCheck.MessageBox dlg = new MsgBoxCheck.MessageBox(); 
DialogResult dr = 
     dlg.Show(@"Software\PricklySoft\TestMsgBoxCheck", 
     "DontShowAgain",DialogResult.OK, 
     "Don't ask me this again", 
     "Now is the time for all good men to check this message box", 
     "Hello", 
     MessageBoxButtons.OK, MessageBoxIcon.Information);