如何将字符串变量转换为c#中的复选框对象名称
本文关键字:复选框 对象 字符串 变量 转换 | 更新日期: 2023-09-27 18:14:55
我想更改代码中现有CheckBox
对象的属性:
string checkBoxName = "checkBox" + Convert.ToString(index);
Object objCheckBox = checkBoxName;
CheckBox myCheckBox = objCheckBox as CheckBox;
if (words[1] == "-1")
{
myCheckBox.Checked = false;
}
else
{
myCheckBox.Checked = true;
}
上面的代码片段不会导致编译错误,但会导致运行时错误
对象引用未设置为对象的实例。
我该怎么办?
我假设你说的是WinForms
你不能那样做。下面一行将null
赋值给myCheckBox
,因为objCheckBox
的类型是string
,而不是CheckBox
。
CheckBox myCheckBox = objCheckBox as CheckBox;
您需要做的是迭代表单上的所有控件以找到名为checkBoxName
的控件。你可以通过LINQ来做,或者你可以这样做:
Control[] controls = this.Find(checkBoxName, true);
if (controls != null && controls.Length > 0)
{
(controls[0] as CheckBox).Checked = words[1] != "-1";
}
LINQ方法可以像这样:
Control c = (from Control c in this.Controls where c.Name.Equals(checkBoxName) select c).FirstOrDefault();
if (c != null)
{
....
}
请注意,如果CheckBox
不是表单本身的直接子元素,LINQ方法将找不到它。为了确保总能找到它,你还需要递归地搜索容器控件——例如:如果你发现一个控件是Panel
,你还需要搜索面板的子控件。
我根据注释编辑了我的代码——只是还记得Find
方法。
由于
这一行,您所展示的代码片段产生了该异常CheckBox myCheckBox = objCheckBox as CheckBox;
as
操作符尝试将左操作数强制转换为右操作数指定的类型。如果强制转换失败,结果将是null
。
在您的例子中,objCheckBox
是string
。string
不能转换为CheckBox
,因此保存在myCheckBox
中的结果为null
。
请使用以下方法之一:
- 将所有复选框存储在数组中。然后,您将能够直接使用索引访问该数组中的元素(您似乎已经存储在
index
变量中)。 - 根据您使用的UI工具包,应该有一个通过名称查找控件的方法。将完整的复选框名称传递给该方法,它将返回适当的
CheckBox
实例(如果找到)。