首页 > 解决方案 > 动态更新标签

问题描述

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

在伪代码中,是这样的:

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

标签: c#winforms

解决方案


我会这样做(经过测试):

foreach (var label in Controls.OfType<Label>())
{
    label.Text = label.Name.Replace("label", "");
}

由于您不需要按顺序填写所有标签文本,因此您可以遍历它们并替换“标签”文本。假设是您所做的假设,即所有标签都命名为“label1”、“label2”等,再加上所有标签都在一个公共控件(面板)或窗口本身内的事实,这就是我所做的。


编辑:其他想法

上面的解决方案有效,但为了让事情更有趣,您可以添加一种方法来防止处理不遵守您的命名约定的标签(即“标签”后跟一个数字):

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

即您检查您的标签名称是否以“标签”开头,后跟仅包含数字的内容。

另一个改进可能是在您的窗口中获取所有标签,即使它们不在同一个控件中。

可以像this question中所示那样完成。


推荐阅读