【发布时间】:2011-03-28 10:01:21
【问题描述】:
不确定什么是最好的表达方式,但我想知道是否可以在 C# (3.5) 中完成动态变量名访问。
这是我目前正在寻找“智能”或通过循环使其更优雅的代码。
private void frmFilter_Load(object sender, EventArgs e)
{
chkCategory1.Text = categories[0];
chkCategory2.Text = categories[1];
chkCategory3.Text = categories[2];
chkCategory4.Text = categories[3];
chkCategory5.Text = categories[4];
chkCategory6.Text = categories[5];
chkCategory7.Text = categories[6];
chkCategory8.Text = categories[7];
chkCategory9.Text = categories[8];
chkCategory10.Text = categories[9];
chkCategory11.Text = categories[10];
chkCategory12.Text = categories[11];
}
有没有办法做类似 ("chkCategory" + i.ToString()).Text 的事情?
【问题讨论】:
-
我可能完全不知道 C# 新特性的动态部分,但我认为 C# 是一种编译语言。因此,要完成此操作,您必须创建编译器实例,生成代码,然后在拥有控件的线程的上下文中执行代码。它不实用。
-
回答回答的一般问题:使用 WinForms 设计器时,处理复选框数组的最佳方法是什么?
-
反射是为了什么而发明的(在您的特殊情况下,您还可以通过它们的名称访问控件)。
-
@Awaken:您可以使用 System.Windows.Forms.CheckedListBox 控件,就像我在回答中所说的那样。只需将控件拖到您的设计器上。如果您已经知道这些项目,请使用 Items 属性设置它们。否则,您可以设置 DataSource 属性,也许在调用 InitializeComponents() 之后在表单的构造函数中