Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VB.NET Iterating Form Labels

I have several label boxes on my design form that all share the naming convention lbl_#.text where # ranges from 1 to 60. I want to make a loop that iterates through each lbl_#.text adding some incremental value, let's say multiples of 2 for this question's theoretical purpose.

Something such that the end result would amount to the following:

lbl_1.text = "2"
lbl_2.text = "4"
lbl_3.text = "6"
...
lbl_60.text = "120"

I'm not sure how to access each of these labels through the coding side, I only know how to explicitly mention each label and assign a value :/

like image 704
Matt Avatar asked Dec 13 '25 15:12

Matt


1 Answers

There are a few options here.

  • In this situation the labels will often have a common container, such as panel or groupbox control. In that case:

    Dim formLabels =  myContainerControl.Controls.OfType(Of Label)()
    For Each formLabel As Label In formLabels
       '...
    Next formLabel
    

    Of course, this mixes logical groups with visual groupings. Those two things don't always align well, so you can also...

  • Add them all to a Label array (or List(Of Label) or any other enumerable):

    Dim formLabels(60) As Label = {lbl_1, lbl_2, lbl_3 .... }
    
    For Each formLabel As Label in formLabels
        '...
    Next formLabel
    

    But sometimes that's more trouble than it's worth, even if you use a loop to create the collection, and so you can also

  • Use the .Name property (in conjunction with a naming convention to identify your desired controls):

    Dim formLabels = Controls.Where(Function(c) c.Name.StartsWith("lbl_"))
    For Each formLabel As Label In formLabels
        '...
    Next formLabel
    
  • Some combination of the above (for example, code in the form load event to create a list based on the name property).

Notice the actual For Each loop is exactly the same in all of those options. No matter what you do, get to the point where you can write a single expression to identify the label control, and then run a simple loop over the expression result.

This points to a final strategy: think in terms of binding to a data source. With a data source, your labels are created as part of a DataGridView, FlowLayoutPanel, or similar control. Then you can iterate the rows in the grid or panel.

like image 84
Joel Coehoorn Avatar answered Dec 16 '25 15:12

Joel Coehoorn



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!