如何显示带复选框的MessageBox?
我想创建一个MessageBox
,它有Yes / No按钮和一个复选框。
该应用程序是一个图片缩放器,它将重新调整大量图片的大小; 在此过程中,它将检查新的位置文件名是否存在,并带有覆盖它的选项。
如果需要, MessageBox
将为用户提供覆盖任何新文件的选项,而复选框将阻止如果要覆盖每个文件,则必须单击Yes x次。
如何在MessageBox
对话框中添加复选框?
您无法向MessageBox添加复选框。 正如蒂姆和rsbarro建议的那样,你应该创建一个自定义对话框。 蒂姆的答案很有效,并且不需要创建新课程。 如果你想在设计师中设计表单,你可以试试这个。
- 使用两个按钮和您需要的复选框创建一个新表单。
- 在表单设计器中,将Yes按钮的
DialogResult
属性设置为Yes,将No按钮的属性设置为否。这将让您发现用户单击的按钮。 - 在表单上创建一个反映复选框状态的属性(可选 – 我不喜欢从另一个表单引用一个表单上的控件,但是如果你将复选框设置为public,那么它也会起作用)。
public bool DoForAll { get { return checkBox.Checked; } }
- 在主表单上,在需要时显示子表单。 例如:
var options = new Options(); var result = options.ShowDialog(); if (result == DialogResult.Yes) { var doForAll = options.DoForAll; }
创建自定义对话框。 这可以给你一个想法:
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?");
试试这个使用MsgBoxCheck类就像使用Windows MessageBox一样简单。 首先,在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);