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,则强制转换将如下所示