如何通过将myLable1.Text作为变量调用来更改它

时间:2016-03-20 09:22:02

标签: c# labels

让我先说一下我几天才学习c#。除了基本的JavaScript之外我没有其他编程经验,所以我仍然不确定正确的术语。关于这个问题......

假设我有10个标签; myLabel1,myLabel2,myLabel3等,我有一个名为i的变量。

那么如何通过切换变量i的结束编号来更改myLabel的.Text?我尝试制作一个新字符串:

string labelNumber = "myLable" + Convert.ToString(i);

然后:

lableNumber.Text = "some text";

显然这不起作用,因为.Text不是lableNumber的已知方法。

2 个答案:

答案 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";