动态更新标签

Posted

技术标签:

【中文标题】动态更新标签【英文标题】:Dynamically update labels 【发布时间】:2018-10-22 07:01:40 【问题描述】:

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

在伪代码中,如下所示:

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

【问题讨论】:

标签数组/列表? 所以你有 25 个标签,分别命名为 Label1、Label2 等,你想循环遍历它们,将它们的文本设置为它们的数字后缀? 是的,我想一个数组可以解决问题。谢谢!!! @FrancescoB。是的,正是 你使用的是winforms,对吧? 【参考方案1】:

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

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;

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

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

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

【讨论】:

@GrantWinney 谢谢。也许我的第一个答案太简洁了,或者投票者想“惩罚”一个他认为不值得的问题的答案。最好的问候。【参考方案2】:

动态获取类的成员需要反射。像这样的东西应该做你想做的事。您需要根据字段的声明方式对其进行调整。

for (int i = 0; i < 8; i++)

    var property = this.GetType().GetProperty("label" + i);
    var label = (Label)property.GetValue(this);
    label.Text = "Label " + i;

【讨论】:

“动态获取类的成员需要反射。” 不,它不需要。您添加到 Windows 窗体的每个控件都在 .Controls 集合中可用,并且可以按名称索引,因此您可以将所有反射代码替换为 var label = Controls["label" + i]; 在这种情况下,是的,你是对的。但是,通常您需要使用反射来以这种方式获取成员。

以上是关于动态更新标签的主要内容,如果未能解决你的问题,请参考以下文章

动态更新标签/按钮文本

Kivy 更新动态标签文本

javascript 动态更新目录项标签

如何使用 Angular 4 元服务动态更新打开的图形标签? [复制]

javascript怎么动态更改img标签的src属性?(js更新图片标签本地)

如何使 Flask-WTForms 从标签名称列表中动态更新标签?