动态更新标签

时间:2018-05-11 20:02:19

标签: c# winforms

如何动态更新表单中标签的文本,使其文本按顺序从1到25进行编号?

在伪代码中,像这样:

for (int i = 1; i <= 25; i++) {
    label + 'i'.Text = "i";
}

2 个答案:

答案 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;
}