2013-06-30 23 views
12

Chciałbym stworzyć MessageBox że ma Tak/Brak przyciski i pola wyboru.Jak wyświetlić MessageBox za pomocą pola wyboru?

Aplikacja służy do zmiany rozmiaru obrazu i zmieni ponownie liczbę zdjęć na raz; podczas tego procesu sprawdzi, czy istnieje nowa nazwa pliku lokalizacji z opcją jej zastąpienia.

MessageBox daje użytkownikowi możliwość nadpisania nowych plików w razie potrzeby, podczas gdy checkbox zapobiegnie konieczności klikania Takx liczbę razy, jeśli chcą, aby zastąpić wszystkie pliki.

Jak dodać pole wyboru do okna dialogowego MessageBox?

+5

Utwórz niestandardowe okno dialogowe. –

+0

Tak, zgadzam się. Niestandardowe okno dialogowe jest drogą do zrobienia. Zobacz także: http://social.msdn.microsoft.com/Forums/vstudio/en-US/2fa7e3e3-f55f-4c0d-bcf5-c7278af1d730/how-to-display-a-checkbox-in-message-box – rsbarro

Odpowiedz

14

nie można dodać pole do MessageBox. Jak sugerują Tim i rsbarro, powinieneś stworzyć niestandardowe okno dialogowe. Odpowiedź Tima będzie działać dobrze i nie wymaga tworzenia nowej klasy. Jeśli chcesz zaprojektować formularz w projektancie, możesz spróbować.

  • Utwórz nowy formularz za pomocą dwóch przycisków i pola wyboru, które będzie potrzebne.
  • W projektanta formularzy, należy ustawić właściwość przycisku TakDialogResult na Tak, a to z Nie przycisk na Nie będzie to pozwalają odkryć co przycisk kliknął użytkownik.
  • Utwórz właściwość w formularzu, która odzwierciedla stan pola wyboru (opcjonalnie - nie podoba mi się odwołanie do formantu w jednym formularzu z innego formularza, ale jeśli zaznaczysz pole wyboru jako publiczne, to też będzie działać).
public bool DoForAll 
{ 
    get { return checkBox.Checked; } 
} 
  • na głównej postaci, pokazać postać dziecka, gdy są potrzebne. Na przykład:
var options = new Options(); 
var result = options.ShowDialog(); 
if (result == DialogResult.Yes) 
{ 
    var doForAll = options.DoForAll; 
} 
+0

Dzięki za odpowiedź! To był trudny wybór pomiędzy twoją a odpowiedzią Tima, ale twoja wizja okazała się nieco łatwiejsza do zaprojektowania. – TK421

+0

Najlepsze rozwiązanie jeszcze! –

16

Utwórz niestandardowe okno dialogowe. Oto coś, co daje wyobrażenie:

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

Można używać go w ten sposób:

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

Co, jeśli mamy wiele pól wyboru? powiedz: chk1, chk2, chk3 i chcesz zwrócić wartości zaznaczonych pól wyboru, możemy mieć 2 pola wyboru jednocześnie i zwracać obie wartości. A jak my tego użyjemy? @Tim –

+0

@silent_programmer użyj odpowiedzi Tima jako przykładu i dodaj więcej pól wyboru w kodzie. –

0

Try To Korzystanie z klasy MsgBoxCheck jest tak proste, jak przy użyciu programu Windows MessageBox. Najpierw dodaj odwołanie do MsgBoxCheck.dll w projekcie C#. Większość osób wywoła tę klasę w następujący sposób:

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