2013-06-30 3 views
12

はい/いいえボタンとチェックボックスを持つMessageBoxを作成します。チェックボックスを使ってMessageBoxを表示する方法は?

このアプリケーションは画像リサイズであり、複数の画像を一度にサイズ変更します。このプロセスでは、新しい場所のファイル名が存在するかどうかを上書きするオプションで確認します。チェックボックスは、彼らはすべてのファイルを上書きしたい場合は倍のはいX番号をクリックする必要が防ぐことができますしながら、

MessageBoxは、ユーザーが必要に応じて新しいファイルを上書きするオプションを提供します。

MessageBoxダイアログにチェックボックスを追加するにはどうすればよいですか?

+5

カスタムダイアログを作成します。 –

+0

うん、私は同意する。カスタムダイアログを使用する方法です。こちらも参照してください:http://social.msdn.microsoft.com/Forums/vstudio/en-US/2fa7e3e3-f55f-4c0d-bcf5-c7278af1d730/how-to-display-a-checkbox-in-message-box – rsbarro

答えて

14

あなたがメッセージボックスにチェックボックスを追加することはできません。 Timとrsbarroが示唆するように、カスタムダイアログを作成する必要があります。ティムの答えはうまくいくでしょうし、新しいクラスを作る必要もありません。デザイナーでフォームをデザインしたい場合は、これを試すことができます。

  • 2つのボタンと必要なチェックボックスを使用して新しいフォームを作成します。フォームデザイナで
  • 、これは、ユーザーがクリックしたものを、ボタンを発見もらおう号にないボタンのはい、そしてそれにはいボタンのDialogResultプロパティを設定します。
  • チェックボックスの状態を反映するプロパティをフォーム上に作成します(オプション - 別のフォームからあるフォームのコントロールを参照するのは嫌いですが、チェックボックスをパブリックにするとそれも機能します)。メインフォーム上
public bool DoForAll 
{ 
    get { return checkBox.Checked; } 
} 
  • 必要なときに、子フォームを表示します。例えば:
var options = new Options(); 
var result = options.ShowDialog(); 
if (result == DialogResult.Yes) 
{ 
    var doForAll = options.DoForAll; 
} 
+0

答えをありがとう!それはあなたとティムの答えの間では難しい選択でしたが、あなたのデザインは視覚的にやや容易になりました。 – TK421

+0

まだ最適なソリューションです! –

16

カスタムダイアログを作成します。ここではあなたのアイデアを与えることができるものです:

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

あなたはこの方法でそれを使用することができます。

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

複数のチェックボックスがある場合はどうなりますか? chk1、chk2、chk3と言って、チェックされるチェックボックスの値を返そうとすると、一度に2つのチェックボックスを持ち、両方の値を返すことができます。そして、それをどうやって使うの? @Tim –

+0

@silent_programmerは、例としてTimの答えを使用し、コードにさらにチェックボックスを追加します。 –

0

はMsgBoxCheckクラスを使用すると、Windowsのメッセージボックスを使用するのと同じくらい簡単です。この をお試しください。まず、C#プロジェクトのMsgBoxCheck.dllへの参照を追加します。ほとんどの人は、次のようにクラスを呼び出します。

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); 
関連する問題