我的设计表单上有几个标签框,它们都共享命名约定 lbl_#.text
,其中 # 的范围为 1 到 60。我想创建一个循环遍历每个 lbl_#.text
添加一些增量值,假设是 2 的倍数,以达到该问题的理论目的。
最终结果如下:
lbl_1.text = "2"
lbl_2.text = "4"
lbl_3.text = "6"
...
lbl_60.text = "120"
我不确定如何通过编码端访问每个标签,我只知道如何明确提及每个标签并分配一个值:/
最佳答案
这里有几个选项。
在这种情况下,标签通常有一个公共(public)容器,例如面板或组框控件。在这种情况下:
Dim formLabels = myContainerControl.Controls.OfType(Of Label)() For Each formLabel As Label In formLabels '... Next formLabel
当然,这将逻辑组与视觉分组混合在一起。这两件事并不总是一致的,所以你也可以......
将它们全部添加到
Label
数组(或List(Of Label)
或任何其他可枚举的数组)中:Dim formLabels(60) As Label = {lbl_1, lbl_2, lbl_3 .... } For Each formLabel As Label in formLabels '... Next formLabel
但有时这比它的值(value)更麻烦,即使您使用循环来创建集合,因此您也可以
使用
.Name
属性(结合命名约定来标识所需的控件):Dim formLabels = Controls.Where(Function(c) c.Name.StartsWith("lbl_")) For Each formLabel As Label In formLabels '... Next formLabel
上述内容的某种组合(例如,在表单加载事件中编写基于 name 属性创建列表的代码)。
请注意,所有这些选项中的实际 For Each
循环完全相同。无论您做什么,都可以编写一个表达式来标识标签控件,然后对表达式结果运行一个简单的循环。
这指向最终策略:从绑定(bind)到数据源的角度进行思考。使用数据源,您的标签将作为 DataGridView
、FlowLayoutPanel
或类似控件的一部分创建。然后您可以迭代网格或面板中的行。
关于VB.NET 迭代表单标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9880003/