动态更新标签
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];
在这种情况下,是的,你是对的。但是,通常您需要使用反射来以这种方式获取成员。以上是关于动态更新标签的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Angular 4 元服务动态更新打开的图形标签? [复制]