我希望从XML文档更新一些标签文本。
标签名为supName1
,supName2
等。
我有一个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;
答案 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++;
}
}