VB.NET迭代表单标签

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)

我不知道如何通过编码方面访问这些标签,我只知道如何明确提到每个标签并赋值:/

Joe*_*orn 5

这里有一些选择.

  • 在这种情况下,标签通常具有公共容器,例如面板或组框控件.在这种情况下:

    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或类似的控制.然后,您可以迭代网格或面板中的行.