【问题标题】:How to show a MessageBox with a checkbox?如何显示带有复选框的 MessageBox?
【发布时间】:2013-06-27 11:27:52
【问题描述】:

我想创建一个具有 Yes/No 按钮和一个复选框的 MessageBox

该应用程序是一个图片调整器,它将一次调整多张图片的大小;在此过程中,它将检查新的位置文件名是否存在并带有覆盖它的选项。

MessageBox 将为用户提供覆盖任何新文件的选项(如果需要),而复选框将防止必须单击 Yes x 次,如果他们想要覆盖每个文件。

如何向MessageBox 对话框添加复选框?

【问题讨论】:

标签: c# checkbox messagebox


【解决方案1】:

您不能将复选框添加到 MessageBox。正如 Tim 和 rsbarro 建议的那样,您应该创建一个自定义对话框。蒂姆的回答会很好,并且不需要创建新课程。如果你想在设计器中设计表单,你可以试试这个。

  • 使用两个按钮和您需要的复选框创建一个新表单。
  • 在表单设计器中,将 Yes 按钮的 DialogResult 属性设置为 Yes,将 No 按钮的属性设置为 No。这会让您发现用户点击了什么按钮。
  • 在表单上创建一个反映复选框状态的属性(可选 - 我不喜欢从另一个表单引用一个表单上的控件,但如果您将复选框设为公开,那也可以)。
public bool DoForAll
{
    get { return checkBox.Checked; }
}
  • 在您的主窗体上,在需要时显示子窗体。例如:
var options = new Options();
var result = options.ShowDialog();
if (result == DialogResult.Yes)
{
    var doForAll = options.DoForAll;
}

【讨论】:

  • 感谢您的回答!在你和蒂姆的答案之间做出一个艰难的选择,但你的最终在视觉上更容易设计。
  • 最好的解决方案!
【解决方案2】:

创建自定义对话框。这里有一些东西可以给你一个想法:

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

【讨论】:

  • 如果我们有多个复选框怎么办?说 chk1, chk2, chk3 并且想要返回选中的复选框的值,我们可以一次有 2 个复选框并返回两个值。然后我们将如何使用它? @蒂姆
  • @silent_programmer 以 Tim 的回答为例,并在代码中添加更多的复选框。
猜你喜欢
  • 2019-10-07
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
相关资源
最近更新 更多