我在vb.net中有一个表格,就像这样......
有一个名为" 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'”的循环之外。我该如何解决这个问题?
答案 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