在面板内的Panel中查找控件

时间:2014-09-11 18:50:33

标签: vb.net winforms

我在vb.net中有一个表格,就像这样......

enter image description here

有一个名为" pnlResults"的外部小组,在该小组中我还有10个小组。 如图所示,标签上的文字为" name"在每个小组中。

我想通过循环访问这些标签但是我尝试了以下但没有成功。

For Each ctrl As Control In Me.Controls
    If TypeOf ctrl Is Label Then
        If ctrl.Name.StartsWith("lblName") Then
            'Found the labels
        End If
    End If
Next

我想要找到的所有标签的名称都以" lblName"开头,然后单独识别它们从" lblname"后面的1到10之间购买一个数字。即" lblName1"等等一直到10

我认为这是因为面板是自己的容器,因此被排除在“me.controls'”的循环之外。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

仅在面板的控件集中搜索。

For Each pl As Panel In pnlResults.Controls.OfType(Of Panel)()
   For i As Integer = 1 To 10
    Dim lb As Label = pl.Controls("lblName" & i.ToString) 'is the label
   Next
Next

答案 1 :(得分:0)

使用递归

Private Sub findingAcontrol(ByRef panelx As Panel)
    For Each Control As Control In panelx.Controls
        If TypeOf Control Is Panel Then
            Me.findingAcontrol(Control)
            Exit Sub
        End If
        If Control.Name = "Button3" Then
            MessageBox.Show(Control.Text)
        End If
    Next
End Sub

添加按钮并调用您的功能。例如:

Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
    For Each Control As Control In Me.Controls
        If TypeOf Control Is Panel Then
            Me.findingAcontrol(Control)
            Exit Sub
        End If
    Next
End Sub

答案 2 :(得分:0)

这是另一种解决方案。你是正确的认为,因为内部面板也是容器,你的代码没有在其中找到控件。

此解决方案只是简单地进入一个级别,一旦找到内部面板,就会根据您经历的内部面板数找到标签。

更新:我原以为这是一个网络应用程序。以下是使用Windows窗体可以执行的操作示例。

Dim i As New Integer
i = 0
For Each ctr As Control In pnlResults.Controls
    If TypeOf ctr Is Panel Then
        i += 1
        Dim lblName As New Label
        lblName = ctr.Controls.Find("lblName" + i.ToString(), False)(0)
        'Do something
    End If
Next

保留Web应用程序的代码以防万一:

Dim i As New Integer
i = 0
For Each ctr As Control In pnlResults.Controls
    If TypeOf ctr Is Panel Then
        i += 1
        Dim lblName As New Label
        lblName = ctr.FindControl("lblName" + i.ToString())
        'Do something
    End If
Next