如何显示带复选框的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);