开发者

VB.NET dynamic use of form controls

I have 10 labels named lbl1, lbl2, ... lbl10

I'd like to change their propriety (using a cicle) with the cicle index

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

I'm using a workaround, but I'm looking for a better way..

    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


Your "workaround" is a fine way to do it. You need to have your controls in some kind of collection, in order to iterate through them.

Perhaps you can use array initializers in order to initialize the array more cleanly (less code): Object and array initializers in VB .NET

You could go through the Controls collection, and do your action for each Label you find, but that is probably not what you want - since that would get you all of the labels on the form.


Taking M.A. Hanin's answer as a base you could simply do something like:

(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

This way you can use a regular expression to filter the name of tour labels (the one provided matches the pattern you gave on the O.P.) and perform the action on a custom method.


If the labels are contained in a Form or some other container, you can use a query similiar to this:

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

Then iterate through the collection, applying your property.


You work around is actually the recommended technique. You may want to use a List(Of Label) and a For...Each statement. This will eliminate the hard-coding and ease maintenance.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜