VB.NET 迭代表单标签

标签 vb.net forms loops iterator

我的设计表单上有几个标签框,它们都共享命名约定 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)到数据源的角度进行思考。使用数据源,您的标签将作为 DataGridViewFlowLayoutPanel 或类似控件的一部分创建。然后您可以迭代网格或面板中的行。

关于VB.NET 迭代表单标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9880003/

相关文章:

asp.net - 是否可以强制 Visual Studio 2010 使用 Visual Basic 10?

c++ - 将 double 除以 double 以获得循环中的余数和 char 参数不起作用

javascript - 遍历 if,如果为 false 则返回,如果为 true => 停止 if

c - 使用 for 循环逐行打印,然后在 c 中扫描到另一个

asp.net - 选择下拉列表项findbytext,不区分大小写vb.net

vb.net - 在 VB.net 中转义字符串(添加斜杠)?

html - 是否可以在 html 表格中插入表格?

javascript - Angular 1.x 中有默认的解析器/格式化程序吗?

mysql - SELECT WITH CALL PROCEDURE MySQL

javascript - 如何向 XMLHttpRequest 添加请求参数