Vb.net 在visual basic中使用for访问多个控件
我得到的表单在一个GroupBox中有几个标签,所有标签都有相同的名称加上一个数字(类似于默认的Label1、Label2、LabelN) 我正在使用sub()更改此标签的外观和内容,但如果不写完整的名称,我无法确定如何引用每个标签。可以执行以下操作:Vb.net 在visual basic中使用for访问多个控件,vb.net,visual-studio-2010,Vb.net,Visual Studio 2010,我得到的表单在一个GroupBox中有几个标签,所有标签都有相同的名称加上一个数字(类似于默认的Label1、Label2、LabelN) 我正在使用sub()更改此标签的外观和内容,但如果不写完整的名称,我无法确定如何引用每个标签。可以执行以下操作: To All Labels inside Group Box Sub(LabelN) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.Event
To All Labels inside Group Box
Sub(LabelN)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LabelMatrix(0) = Label1
LabelMatrix(1) = Label2
LabelMatrix(2) = Label3
LabelMatrix(3) = Label4
....
End Sub
Dim lbl As Label
Dim matches() As Control
For i As Integer = 1 To 10
matches = Me.Controls.Find("Label" & i, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is Label Then
lbl = DirectCast(matches(0), Label)
' ... do something with "lbl" ...
End If
Next
目前,我正在创建一个标签数组,并在加载表单时指定名称,例如:
To All Labels inside Group Box
Sub(LabelN)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LabelMatrix(0) = Label1
LabelMatrix(1) = Label2
LabelMatrix(2) = Label3
LabelMatrix(3) = Label4
....
End Sub
Dim lbl As Label
Dim matches() As Control
For i As Integer = 1 To 10
matches = Me.Controls.Find("Label" & i, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is Label Then
lbl = DirectCast(matches(0), Label)
' ... do something with "lbl" ...
End If
Next
但我想一定有更好(更聪明)的方法来做到这一点
我想用一种方法来获取“组”框中标签对象的总数,但我的努力没有成功。您可以使用循环来生成控件名称和控件。Find()来获取对所需控件的引用。比如:
To All Labels inside Group Box
Sub(LabelN)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LabelMatrix(0) = Label1
LabelMatrix(1) = Label2
LabelMatrix(2) = Label3
LabelMatrix(3) = Label4
....
End Sub
Dim lbl As Label
Dim matches() As Control
For i As Integer = 1 To 10
matches = Me.Controls.Find("Label" & i, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is Label Then
lbl = DirectCast(matches(0), Label)
' ... do something with "lbl" ...
End If
Next
可以使用循环来生成控件名称,并使用Controls.Find()来获取对所需控件的引用。比如:
To All Labels inside Group Box
Sub(LabelN)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LabelMatrix(0) = Label1
LabelMatrix(1) = Label2
LabelMatrix(2) = Label3
LabelMatrix(3) = Label4
....
End Sub
Dim lbl As Label
Dim matches() As Control
For i As Integer = 1 To 10
matches = Me.Controls.Find("Label" & i, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is Label Then
lbl = DirectCast(matches(0), Label)
' ... do something with "lbl" ...
End If
Next
可以使用循环来生成控件名称,并使用Controls.Find()来获取对所需控件的引用。比如:
To All Labels inside Group Box
Sub(LabelN)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LabelMatrix(0) = Label1
LabelMatrix(1) = Label2
LabelMatrix(2) = Label3
LabelMatrix(3) = Label4
....
End Sub
Dim lbl As Label
Dim matches() As Control
For i As Integer = 1 To 10
matches = Me.Controls.Find("Label" & i, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is Label Then
lbl = DirectCast(matches(0), Label)
' ... do something with "lbl" ...
End If
Next
可以使用循环来生成控件名称,并使用Controls.Find()来获取对所需控件的引用。比如:
To All Labels inside Group Box
Sub(LabelN)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LabelMatrix(0) = Label1
LabelMatrix(1) = Label2
LabelMatrix(2) = Label3
LabelMatrix(3) = Label4
....
End Sub
Dim lbl As Label
Dim matches() As Control
For i As Integer = 1 To 10
matches = Me.Controls.Find("Label" & i, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is Label Then
lbl = DirectCast(matches(0), Label)
' ... do something with "lbl" ...
End If
Next
这非常简单,不需要阵列:
For Each lbl As Label In MyGroupBox.Controls.OfType(Of Label)()
' ... do something with "lbl"
Next lbl
这非常简单,不需要阵列:
For Each lbl As Label In MyGroupBox.Controls.OfType(Of Label)()
' ... do something with "lbl"
Next lbl
这非常简单,不需要阵列:
For Each lbl As Label In MyGroupBox.Controls.OfType(Of Label)()
' ... do something with "lbl"
Next lbl
这非常简单,不需要阵列:
For Each lbl As Label In MyGroupBox.Controls.OfType(Of Label)()
' ... do something with "lbl"
Next lbl
很好的解决方案,我想在我将值分配给匹配项之前,最好使用GetLength对其进行重拨,不是吗?不,matches()将由Controls.Find()自动创建并填充。从技术上讲,多个控件可能具有相同的名称,这就是返回数组的原因。IDE在设计时防止名称冲突,但不能对运行时创建的控件强制执行该规则。如果控件的数量是静态的,那么您可以使用我上面给出的代码在程序首次启动时构建一个列表。很好的解决方案,我想在此之前,我将值分配给匹配项会更好地使用GetLength对其进行重分,不是吗?不,匹配项()将由控件自动创建和填充。Find()。从技术上讲,多个控件可能具有相同的名称,这就是返回数组的原因。IDE在设计时防止名称冲突,但不能对运行时创建的控件强制执行该规则。如果控件的数量是静态的,那么您可以使用我上面给出的代码在程序首次启动时构建一个列表。很好的解决方案,我想在此之前,我将值分配给匹配项会更好地使用GetLength对其进行重分,不是吗?不,匹配项()将由控件自动创建和填充。Find()。从技术上讲,多个控件可能具有相同的名称,这就是返回数组的原因。IDE在设计时防止名称冲突,但不能对运行时创建的控件强制执行该规则。如果控件的数量是静态的,那么您可以使用我上面给出的代码在程序首次启动时构建一个列表。很好的解决方案,我想在此之前,我将值分配给匹配项会更好地使用GetLength对其进行重分,不是吗?不,匹配项()将由控件自动创建和填充。Find()。从技术上讲,多个控件可能具有相同的名称,这就是返回数组的原因。IDE在设计时防止名称冲突,但不能对运行时创建的控件强制执行该规则。如果控件的数量是静态的,那么当程序第一次启动时,您可以使用我上面给出的代码构建一个列表。我想这取决于您在做什么。如果控件被添加/删除,或者它们的名称在表单设计的某个时候被更改,那么返回的控件的顺序(如果这对您的场景很重要)可能不是您所期望的。如果要针对的控件位于多个容器中,那么控件.Find()就变得非常方便。=)我想这取决于你在做什么。如果控件被添加/删除,或者它们的名称在表单设计的某个时候被更改,那么返回的控件的顺序(如果这对您的场景很重要)可能不是您所期望的。如果要针对的控件位于多个容器中,那么控件.Find()就变得非常方便。=)我想这取决于你在做什么。如果控件被添加/删除,或者它们的名称在表单设计的某个时候被更改,那么返回的控件的顺序(如果这对您的场景很重要)可能不是您所期望的。如果要针对的控件位于多个容器中,那么控件.Find()就变得非常方便。=)我想这取决于你在做什么。如果控件被添加/删除,或者它们的名称在表单设计的某个时候被更改,那么返回的控件的顺序(如果这对您的场景很重要)可能不是您所期望的。如果要针对的控件位于多个容器中,那么控件.Find()就变得非常方便。=)