假设我们有 5 个字符串变量,我们想在运行时将“Foo”分配给它们。
而不是这个
string a1 = "Foo";
string a2 = "Foo";
string a3 = "Foo";
string a4 = "Foo";
string a5 = "Foo";
我们不能使用这样的东西:
for(int i = 0;i < 5;i++)
{
a+i = "Foo";
}
是否不可能以类似的方式访问它们?
正如其他人所说,数组(或另一个集合)是一种更好的方法。
将数组视为您始终通过索引访问的变量的集合。
我想不出任何你想要有一组变量的原因,如你的问题所示。如果您绝对必须这样做,并且它们是实例/静态变量,那么如果您真的想要,您可以使用反射来访问它们 - 但是使用数组或其他集合会好得多。
Label[] labels = new Label[] { label1, label2, label3, label4, label5 };
for (int i = 0; i < labels.Length; i++)
{
labels[i].Text = "Foo";
}
您可以按名称访问控件,但是将标签项数组添加到页面然后使用整数访问数组会更简洁。
您可以通过迭代标签的父控件:
for (int i=0; i<= parent.controls.count(); i++)
{
if (parent.controls("label" + i) != null)
{
...
}
}
高温高压
编辑:
在您进行编辑之后,我能看到的唯一方法是将它们添加到列表/数组/字典并遍历它,尽管原理是相同的。
假设我们在这里讨论的是网络表单,那么您可以使用 FindControl() 方法。
private void Button1_Click(object sender, EventArgs MyEventArgs)
{
// Find control on page.
TextBox myControl1 = (TextBox) FindControl("Label1");
if(myControl1!=null)
{
string message = myControl1.Text;
}
}
您可以创建标签数组或数组列表,并将标签放入其中。然后你可以做类似的事情。
如果所有标签都具有相同的父级,并且该父级没有包含其他标签控件,则可以执行以下操作:
foreach (Control lbl in ParentControl)
{
if (lbl is TextBox)
{
((Label)lbl).Text = "Foo";
}
}