C# 将复选框的文本调用到MessageBox?

C# 将复选框的文本调用到MessageBox?,c#,checkbox,messagebox,C#,Checkbox,Messagebox,您好,我在尝试使这部分代码正常工作时遇到问题: private void selectedBox(string text) { var boxes = new Control[] { f1.checkEdit7, f1.checkEdit8, f1.checkEdit9 }; foreach (var box in boxes) { if(box.Checked == true) {

您好,我在尝试使这部分代码正常工作时遇到问题:

 private void selectedBox(string text)
    {
        var boxes = new Control[] { f1.checkEdit7, f1.checkEdit8, f1.checkEdit9 };
        foreach (var box in boxes)
        {
            if(box.Checked == true)
            {
                text = box.Text.ToString();
            }
        }
    }
我希望能够获得选中复选框的文本并在MessageBox中调用它,我将如何实现这一点?谢谢大家!

  private List<string> selectedBoxes()
    {
        List<string> checkBoxText = new List<string>();
        var boxes = new CheckBox[] { checkBox1, checkBox2, checkBox3 };
        foreach (var box in boxes)
        {
            if (box.Checked == true)
            {
                checkBoxText.Add(box.Text);

            }
        }
        return checkBoxText;
    }
    public void ShowMessage()
    {
        var selectedCheckboxes = selectedBoxes();
        MessageBox.Show(string.Join(",", selectedCheckboxes));
    }

最大的变化是使用更具体的Checkbox类,该类继承自Checkbox->ButtonBase=>control。通过更具体的类,您可以获得针对复选框而不是控件的功能。

通常,对布尔值进行计算比较不是一个好主意,因为它已经是布尔值,例如if box.Checked==true与if box.Checked是相同的。第二个较短且易于阅读。在这个问题上,你已经给出了你想要发生的事情,你的例子很好。但是,代码看起来应该可以工作,因此最好描述问题所在,如果存在异常,请提供异常类型、消息以及引发异常的行。voids不返回任何内容。看起来您希望文本变量默认为ref。您好@Erik Philips,谢谢您的提示!我收到的错误在“如果”框的行上。选中的复选框用红色下划线表示“Control”不包含“Checked”的定义,并且找不到接受“Control”类型的第一个参数的可访问扩展方法“Checked”?是否缺少using指令或程序集引用?如果有一组复选框为什么要声明一系列控件?@Xjuice我强烈建议如果有人提出问题,你应该实际更新问题本身,而不是通过注释进行回复,这样以后的读者就不需要阅读注释来理解问题。当然,这是可行的,但是我想你应该试着解释问题是什么,为什么OP版本不能工作。虽然我不得不更改var-box=new-CheckBox[]{checkBox1,checkBox2,checkBox3},但这对我来说确实有效;to var box=new DevExpress.XtraEditors.checkeedit[]{f1.checkeedit1,f1.checkeedit2,f1.checkeedit3};因为我的复选框来自DevExpress。当您使用控件数组来存储特定类型的控件时,您仍然有一个包含特定类型的数组,没有人会将它们更改为较小的值,但是当您在控件数组上循环时,foreach语句中返回的变量是control类型的基类,因此您无法使用选中的特定属性。如果对box变量执行显式强制转换以作为CheckEdit,则可以重新访问选中的属性如果CheckEditbox.Checked==true,则强制转换将如下所示