如何动态更新表单中标签的文本,使其文本按顺序从1到25进行编号?
在伪代码中,像这样:
for (int i = 1; i <= 25; i++) {
label + 'i'.Text = "i";
}
答案 0 :(得分:1)
我会这样做(测试过):
foreach (var label in Controls.OfType<Label>())
{
label.Text = label.Name.Replace("label", "");
}
由于您不需要按顺序填写所有标签文字,因此您可以循环浏览它们并替换&#34;标签&#34;文本。 假设是您所做的,即所有标签都命名为&#34; label1&#34;,&#34; label2&#34;等等,以及所有标签都在公共控件(面板)或窗口本身内部的事实,这就是我所做的。
编辑:其他创意
上面的解决方案有效但是,为了使事情更有趣,你可以添加一个方法来防止处理不符合你的命名约定的标签(即&#34;标签&#34;后跟一个数字):
foreach (var label in Controls.OfType<Label>())
{
if (RespectsNamingConvention(label.Name))
{
label.Text = label.Name.Replace("label", "");
}
}
你有
的地方private bool RespectsNamingConvention(string name)
{
var Suffix = name.Replace("label", "");
return
name.StartsWith("label") &&
Suffix.Count() > 0 &&
Suffix.Where(e => !Char.IsDigit(e)).Count() == 0;
}
即。检查您的标签名称是否以&#34;标签&#34;开头,后跟一些只包含数字的内容。
另一项改进可能是获取窗口中的所有标签,即使它们不在同一控件中。
可以像question中所示完成。
答案 1 :(得分:0)
动态获取类的成员需要反射。这样的事情应该做你想要的。您需要根据声明字段的方式进行调整。
for (int i = 0; i < 8; i++)
{
var property = this.GetType().GetProperty("label" + i);
var label = (Label)property.GetValue(this);
label.Text = "Label " + i;
}