动态变量名称在C#中用于WinForms

Awa*_*ken 5 .net c# controls winforms

不确定说出这个的最好方法是什么,但我想知道是否可以在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];  


    }
Run Code Online (Sandbox Code Playgroud)

有没有办法做某事("chkCategory"+ i.ToString()).文字?

Hen*_*man 6

是的,你可以使用

  Control c = this.Controls.Find("chkCategory" + i.ToString(), true).Single();
  (c as textBox).Text = ...;
Run Code Online (Sandbox Code Playgroud)

添加一些错误检查并将其包装在一个漂亮的(扩展)方法中.


编辑:它返回,Control[]所以最后需要a [0]或a .Single().添加.


Ron*_*ony 5

for(...)
{
     CheckBox c = this.Controls["chkCategory" + i.ToString()] as CheckBox ;

     c.Text = categories[i];  
}
Run Code Online (Sandbox Code Playgroud)