VB.NET动态使用表单控件

时间:2010-03-07 10:50:14

标签: .net vb.net forms controls

我有10个名为lbl1lbl2,... lbl10

的标签

我想用cicle指数改变它们的适当性(使用cicle)

for i as integer=1 to 10 step 1
    lbl (i) = PROPRETY 'I know this is wrong but it's what I would do...
end for

我正在使用解决方法,但我正在寻找更好的方法..

    Dim exm(10) As Label
    exm(1)=lbl1
    exm(2)=lbl2
    ...
    exm(10)=lbl10

    for i as integer=1 to 10 step 1
        exm (i) = PROPRETY 
    end for

4 个答案:

答案 0 :(得分:2)

您的“解决方法”是一种很好的方法。你需要在某种集合中使用你的控件,以便迭代它们。

也许您可以使用数组初始值设定项来更清晰地初始化数组(代码更少):Object and array initializers in VB .NET

您可以浏览Controls集合,并为您找到的每个Label执行操作,但这可能不是您想要的 - 因为这样可以获得表单上的所有标签。

答案 1 :(得分:1)

如果标签包含在表单或其他容器中,您可以使用与此类似的查询:

Dim myLabels = (From g As Label In Me.Controls Select g _
                Where Mid(g.Name, 1, 3) = "lbl" Order By g.Name)

然后遍历集合,申请你的财产。

答案 2 :(得分:1)

M.A. Hanin的答案为基础,您可以简单地执行以下操作:

(From l in Me.Controls _
Where RegEx.IsMatch(l.Name, "^lbl[0-9]+") AndAlso TypeOf l is Label
Order By l.Name).ForEach(Function(l) SetPropertyForLabel(l))

Sub SetPropertyForLabel(lbl as Label)
   ' Do some stuff '
   lbl.Text = lbl.Name
End Sub

通过这种方式,您可以使用正则表达式来过滤游览标签的名称(提供的标签与您在O.P.上提供的模式匹配)并对自定义方法执行操作。

答案 3 :(得分:1)

你的解决方法实际上是推荐的技术。您可能希望使用List(Of Label)和For ... Each语句。这将消除硬编码和易维护。