2

我正在尝试以下代码:

for (int i = 0; i < students.Length; i++)
{
    "student" + i.ToString().Text = students[i];
}

我已经有许多标签,每个标签的名称如下: student1 student2 student3 。.

但我收到了这个错误:错误 1 ​​'string' 不包含'Text' 的定义,并且找不到接受'string' 类型的第一个参数的扩展方法'Text'(您是否缺少 using 指令或程序集引用?) F:\Homework\Homework\Form1.cs 161 46 家庭作业

请问有什么帮助吗??!

4

4 回答 4

8

几乎任何语言都不能使用动态变量名称。

看起来您正在寻找一个控件集合数组

就像是:

var studentControls = new List<Control>();
studentControls.Add(student1); 
studentControls.Add(student2);
...
for (int i = 0; i < students.Length; i++)
{
    studentControls[i].Text = students[i];
}
于 2013-01-24T10:34:37.690 回答
3

使用 Controls.Find("student" + i.ToString())

于 2013-01-24T10:35:39.017 回答
3

这可能会有所帮助

Controls.Find(string.Format("student{0}", i));

更好的解决方案:

设置Tag你的属性Labels如下:

Student1.Tag = 1;
Student2.Tag = 2;
Student3.Tag = 3;

我假设您Labels在一个名为container. 使用此代码:

foreach(var item in container.Children) //based on your container type this line may change
{
    if(item is Label)
    {
        Label temp = ((Label)item);
        temp.Text = students[int.Parse(temp.Tag.ToString())]
    }
}
于 2013-01-24T10:36:39.540 回答
0

通过这样做i.ToString(),您将获得一个字符串,该字符串不具有 Text 属性 :)。这就是导致您的异常的原因。

如果Students是具有该属性的控件列表,.Text则使用该属性并删除ToString()else,删除.Text.

于 2013-01-24T10:42:30.297 回答