Mat*_*att 3 vb.net forms iterator loops
我的设计表单上有几个标签框,它们共享命名约定lbl_#.text,其中#的范围从1到60.我想创建一个循环,迭代每个lbl_#.text添加一些增量值,让我们说这个问题的理论目的的2的倍数.
这样的最终结果将达到以下目的:
lbl_1.text = "2"
lbl_2.text = "4"
lbl_3.text = "6"
...
lbl_60.text = "120"
Run Code Online (Sandbox Code Playgroud)
我不知道如何通过编码方面访问这些标签,我只知道如何明确提到每个标签并赋值:/
这里有一些选择.
在这种情况下,标签通常具有公共容器,例如面板或组框控件.在这种情况下:
Dim formLabels = myContainerControl.Controls.OfType(Of Label)()
For Each formLabel As Label In formLabels
'...
Next formLabel
Run Code Online (Sandbox Code Playgroud)
当然,这将逻辑组与可视分组混合在一起.这两件事情并不总是很好,所以你也可以......
将它们全部添加到Label数组(List(Of Label)或任何其他可枚举的):
Dim formLabels(60) As Label = {lbl_1, lbl_2, lbl_3 .... }
For Each formLabel As Label in formLabels
'...
Next formLabel
Run Code Online (Sandbox Code Playgroud)
但有时这比它的价值更麻烦,即使你使用循环来创建集合,所以你也可以
使用该.Name属性(与命名约定一起标识所需的控件):
Dim formLabels = Controls.Where(Function(c) c.Name.StartsWith("lbl_"))
For Each formLabel As Label In formLabels
'...
Next formLabel
Run Code Online (Sandbox Code Playgroud)上面的一些组合(例如,表单加载事件中的代码,根据name属性创建一个列表).
请注意,所有这些选项中的实际For Each循环完全相同.无论你做什么,都可以编写单个表达式来识别标签控件,然后在表达式结果上运行一个简单的循环.
这指向了最终策略:考虑绑定到数据源.与数据源,则您的标签作为的一部分创建DataGridView,FlowLayoutPanel或类似的控制.然后,您可以迭代网格或面板中的行.