我需要获取文本框列表,然后找到具有匹配名称+前缀“lb_”的标签,然后调用其上的函数。我在这里还没有发现有人遇到这个问题。由于某种原因,它读取标签的名称,但文本框的名称显示为列表中出现的数字。
它也无法循环遍历文本框列表中的每个文本框,仅循环第一个项目,但它确实循环遍历每个标签。我已经确认语句“Controls.OfType(Of TextBox)”返回适当长度的列表。
For Each t In Controls.OfType(Of TextBox)
Dim l = DirectCast(Controls("lb_" & t.Name), Label)
If Not l Is Nothing Then
SetControlProps_EnLo_KP(t, l)
End If
Next
所有代码都位于表单的代码中。
编辑:所以我真正想知道的是 txtbox.Name 返回“1”而不是“txtbox”的可能解决方案/原因,即使放置在 foreach 循环之外。
解决方案:存在一个将所有文本框名称设置为 vbNull 的循环。我猜默认情况下,如果一个name设置为null,它就会变成“1”,无论引用哪个文本框,name属性都是“1”
最佳答案
For Each t In Controls.OfType(Of TextBox)
Dim l = DirectCast(Controls("lb_" & t.Name), Label)
如果可能不匹配,请在使用前测试 l
是否为 Nothing
。
如果某些 TextBox
位于不同的父级上,您可以执行以下操作:
For Each t In Controls.OfType(Of TextBox)().Concat(otherParentControl.Controls.OfType(Of TextBox)())
关于vb.net - 如何获取可以访问其属性的文本框列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51100260/