Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在visual basic中使用for访问多个控件_Vb.net_Visual Studio 2010 - Fatal编程技术网

Vb.net 在visual basic中使用for访问多个控件

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

我得到的表单在一个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.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()就变得非常方便。=)