如何通过将其作为变量调用来更改 myLable1.Text
How can I change myLable1.Text by calling it as a variable
首先让我说我才学习 C# 几天。除了基本 JavaScript 之外,我之前没有任何编程经验,所以我仍然不确定很多正确的术语。关于问题...
假设我有 10 个标签; myLabel1、myLabel2、myLabel3 等,我有一个名为 i.
的变量
那么如何通过切换变量 i 的结束编号来更改 myLabel 的 .Text 呢?我尝试制作一个新字符串:
string labelNumber = "myLable" + Convert.ToString(i);
然后:
lableNumber.Text = "some text";
显然这不起作用,因为 .Text 不是 lableNumber 上的已知方法。
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
属性,其中 是 一个字符串,但 不是 意味着根据需要识别变量不是唯一,可以随时更改..
我认为你正在尝试做这样的事情:
// 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";
首先让我说我才学习 C# 几天。除了基本 JavaScript 之外,我之前没有任何编程经验,所以我仍然不确定很多正确的术语。关于问题...
假设我有 10 个标签; myLabel1、myLabel2、myLabel3 等,我有一个名为 i.
的变量那么如何通过切换变量 i 的结束编号来更改 myLabel 的 .Text 呢?我尝试制作一个新字符串:
string labelNumber = "myLable" + Convert.ToString(i);
然后:
lableNumber.Text = "some text";
显然这不起作用,因为 .Text 不是 lableNumber 上的已知方法。
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
属性,其中 是 一个字符串,但 不是 意味着根据需要识别变量不是唯一,可以随时更改..
我认为你正在尝试做这样的事情:
// 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";