web-dev-qa-db-ja.com

チェックボックス付きのMessageBoxを表示するにはどうすればよいですか?

次のようなMessageBoxを作成したいと思います Yes/No ボタンとチェックボックス。

このアプリケーションは画像リサイザーであり、一度に複数の画像のサイズを変更します。その過程で、新しい場所のファイル名が存在するかどうかをチェックし、それを上書きするオプションを付けます。

MessageBoxは、必要に応じて新しいファイルを上書きするオプションをユーザーに提供し、チェックボックスはクリックする必要をなくします Yesxすべてのファイルを上書きする場合の回数。

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

14
TK421

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

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

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

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?");
16
Tim Schmelter