I would like to create a MessageBox
that has Yes/No buttons AND a checkbox.
The application is a picture resizer and it will be re-sizing a number of pictures at once; in the process it will check if the new location filename exists with the option to overwrite it.
The MessageBox
will give the user the option to overwrite any new files if desired, while the checkbox will prevent having to click Yes x number of times if they want to overwrite every file.
How do I add a checkbox to a MessageBox
dialog?
You can't add a checkbox to a MessageBox. As Tim and rsbarro suggest, you should create a custom dialog. Tim's answer will work well, and doesn't require creation of a new class. If you want to design the form in the designer though, you could try this.
- Create a new form with the two buttons and the checkbox you'll need.
- In the forms designer, set the
DialogResult
property of the Yes button to Yes, and that of the No button to No. This'll let you discover what button the user clicked.
- Create a property on the form that reflects the state of the checkbox (optional - I don't like to reference a control on one form from another form, but if you make the checkbox public, that'll work too).
public bool DoForAll
{
get { return checkBox.Checked; }
}
- On your main form, show the child form when needed. For instance:
var options = new Options();
var result = options.ShowDialog();
if (result == DialogResult.Yes)
{
var doForAll = options.DoForAll;
}
Create a custom dialog. Here is something that could give you an 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;
}
}
You can use it in this way:
bool overwrite = CheckboxDialog.ShowDialog("overwrite", "Overwrite location?");