循环标签并更改值c#

时间:2017-02-06 16:06:44

标签: c# winforms loops

我希望从XML文档更新一些标签文本。

标签名为supName1supName2等。

我有一个for循环,它遍历List.Count中的所有XML节点。

var n = list.Count;
        for (int i = 0; i < n; i++)

我需要更新每个list.count的标签文本,但我无法弄清楚如何引用标签。

从我的VBA经验来看,它会像"supName"+i,但我无法弄清楚C#。

我尝试了以下内容;

var label = (Label)Controls["supName" + i];

但尝试按如下方式使用时返回null;

label.Text = list[i].Attributes["name"].Value;

5 个答案:

答案 0 :(得分:1)

应该这样做......

foreach (Label myControl in this.Controls
                 .OfType<Label>()
                 .Where(myControl => (myControl).Name == "ValueFromList"))
            {
                //Apply change here.
            }

答案 1 :(得分:1)

这不起作用的原因:

iDataReader

是因为控件是分层的,并且您的标签可能不是当前表单/控件的直接后代。

为此目的,存在Find方法:

var label = (Label)Controls["supName" + i];

答案 2 :(得分:1)

这些Label是引用类型,因此您可以使用一行Linq

Controls.OfType<Label>().Select(lbl => lbl.Text = "hello world!");

如果您需要更改特定Label,请执行:

Controls.OfType<Label>().Where(lbl => lbl.Name.EndsWith(index)).Select(lbl => lbl.Text = "hello world!");
// where index -> int index;

所以基本上找到你想要使用的Label

Controls.OfType<Label>().Where(lbl => lbl.Name.EndsWith(index));
// or if you want only first matched element 
Controls.OfType<Label>().FirstOrDefault(lbl => lbl.Name.EndsWith(index));

答案 3 :(得分:1)

您需要通过Name属性找到表单中的标签,但必须记住它们可能放在子控件上,而不是表单本身。这里可以帮助您的方法是ControlCollection.Find(),您可以在表单的Controls属性上调用该属性,该属性代表表单的ControlCollection

int n = list.Count;
for(int i=0; i<n; i++)
{
    // the second argument "true" indicates to 
    // search child controls recursivly
    Label label = Controls.Find($"supName{i}", true).OfType<Label>().FirstOrDefault(); 
    if (label == null) continue; // no such label, add error handling
    label.Text = list[i].Attributes["name"].Value;
}

答案 4 :(得分:1)

以下代码应至少为Windows窗体应用程序执行。感谢

       var labels = this.Controls.OfType<Label>();
            if (labels != null)
            {
                int cnt = 0;
                foreach (var label in labels)
                {
                    label.Text = "New label text " + cnt++;
                }
            }