首先,如果有人问过,我不完全确定如何用这句话或者搜索什么来搜索。
假设我有多个标签:label1,label2,label3,label4等......
现在,我知道这适用于PHP,所以我想知道是否有办法在C#中执行此操作 - 我可以以某种方式遍历这些标签以在循环中设置它们的值吗?
即。
string[] something = new string[3] { "text", "text", "text" };
for (int i = 0; i < something.length; i++)
{
labels(i).Text = something[i];
}
答案 0 :(得分:3)
您可以使用Controls.Find()
方法通过其控件名称查找Label Control。
试试这个:
for (int i = 0; i < something.length; i++)
{
((Label) Controls.Find("lablel"+i,true)[0]).Text = something[i];
}
答案 1 :(得分:2)
答案 2 :(得分:1)
您可以使用Controls.Find
查找所有引用:
for (int i = 0; i < something.length; i++)
{
var lbl = this.Controls.Find("lable" + i, true);
if(lbl.Length > 0)
((Label)lbl[0]).Text = something[i];
}
另一种使用LINQ的方法(它不会递归搜索而不是Find
):
for (int i = 0; i < something.Length; i++)
{
Label lbl = this.Controls.Cast<Label>()
.FirstOrDefault(l => l.Name.Equals("lable" + i, StringComparison.InvariantCultureIgnoreCase));
if(lbl != null) lbl.Text = something[i];
}
但是,我不会称之为良好做法。您的阵列和标签彼此直接相关。如果更改阵列但忘记更改标签会有什么问题?
您应该使用其他控件,例如ListBox
或DataGridView
,或者根据数组的大小动态创建标签。
答案 3 :(得分:1)
或者只需查找所有标签而无需知道其名称:
foreach (Control ctrl in this.Controls)
{
Label label = ctrl as Label;
if (label != null)
{
label.Text = "";
}
}