让我先说一下我几天才学习c#。除了基本的JavaScript之外我没有其他编程经验,所以我仍然不确定正确的术语。关于这个问题......
假设我有10个标签; myLabel1,myLabel2,myLabel3等,我有一个名为i的变量。
那么如何通过切换变量i的结束编号来更改myLabel的.Text?我尝试制作一个新字符串:
string labelNumber = "myLable" + Convert.ToString(i);
然后:
lableNumber.Text = "some text";
显然这不起作用,因为.Text不是lableNumber的已知方法。
答案 0 :(得分:1)
C#和大多数其他编译语言一样,不会像许多脚本语言那样容易地做到这一点。
如果您想通过字符串访问控件,则需要在Dictionay<string, Control>
中收集控件,或者如果您只关心Labels
,则需要Dictionay<string, Label>
:
Dictionary<string, Label> labels = new Dictionary<string, Label>();
// you can do this in a loop over i:
Label newLabel = new Label();
newLabel.Name = "myLabel" + Convert.ToString(i);
// maybe set more properties..
labels.Add(newLabel.Name, newLabel ); // <-- here you need the real Label, though!
flowLayoutPanel1.Controls.Add(newLabel ) // <-- or wherever you want to put them
现在您可以通过其名称访问每个字符串:
labels["myLabel3"].Text = "hi there";
请注意,要将它们添加到Dictionary
,(或List<T>
,如果您对通过索引访问它们感到满意),则需要在循环中创建它们时将其添加到以后无法访问它们;至少不是没有reflection,这对于这种情况来说是过度的。
另请注意变量名称之间的差异,该变量名称不是字符串,而是编译器的标记及其Name
属性 ,是一个字符串,但不意味着识别变量,因为它不必是唯一,可以更改在任何时候..
答案 1 :(得分:1)
我认为你正在尝试做这样的事情:
// Create N label xontrols
Labels[] labels = new Labels[n];
for (int i = 0; i < n; i++)
{
labels[i] = new Label();
// Here you can modify the value of the label which is at labels[i]
}
// ...
labels[2] .Text = "some text";