Runtime Controls

martialarts

Well-known member
Joined
Jun 20, 2003
Messages
59
Location
Chicago Area
My program reads from a data file and outputs a series of controls for each line in the text file. I am using .NET 2002 and from what I can gather, control collections are no longer built in. I am trying to dynamically create and dynamically name these controls. I was able to integrate this code into my program and it works partially:

this is part of a loop and counter is incremented each time
element is an instance of a class
Dim LabelA1 As New Label()
LabelA1.Width = 232
LabelA1.Height = 24
LabelA1.Location = New Point(16, counter * 25)
LabelA1.Text = element.name
Me.Controls.Add(LabelA1)
LabelA1.Name = "LabelA" & counter

I dont know if Im on the right track, but it does display all the controls like I need it to when I run it. The problem is that all the labels are named "LabelA1", and my attempts to manipulate any one of them are treated aggregately. I guess this is because their name was "LabelA1" when added to me.controls. Please point me in the right direction. I am new to VB and .NET, but not to programming in general. Thanks!
 
Thank you both for responding, especially so quickly. I implemented mutants solution and it worked... although it led me to another question. I dont know if I completely understand control collections yet, but to answer Robbys question- I intended for it to increment so that I could individually reference each of them with LabelA1,LabelA2, LabelB1,LabelB2... where LabelAx was the first column of labels and LabelBx was the second column, etc. I couldnt implement that correctly because the syntax to add to a collection is:

me.controls.add(LabelA1)

which doesnt allow me to dynamically name the labels with variables... I dont know if there is an alternate syntax that would work better for me...

me.controls.add("LabelA" & x)

would be nice, but .net doesnt seem to work that way. Anyway, by using the control collection references I can awkwardly manipulte individual controls, but I dont know of a way to use a gotfocus event to change the background of my text boxes since they are also dynamically generated. Do you know how to do this? Thanks again for your time!
 
Im not sure if im understanding you right :) , but I thinnk you are in need of an event handler. To add one dynamically do this:
Code:
AddHandler ControlName(counterorwhateveryouuse).GotFocus, AddressOf handlersub
Your handler sub must accept arguments that correspond to the event. Then you check what control sent it with the sender argument.

Again, I might totally off on this, so tell me if im talking about what you wanted to know :) .
 
If all you want is to add controls at runtime...
Code:
For x = 1 To 20
  txt = New textbox()
  With txt
    AddHandler .GotFocus, AddressOf txtClick
    .Text = "Textbox " & x.tostring
    .Location = New Point(0, x * 25)
    .Size = New Size(200, 60)
  End With
  Controls.Add(txt)
Next
 
Thanks again. I used your advice and it worked! I took it a couple of steps farther to make sure that I could do everything I needed to do. I am finally able to address my dynamic controls individually, although I have to do by searching through the controls array to find them... which isnt a problem at all. Im surprised and also greatful that both of you are so active on this forum. If I become experienced at VB I will be sure to check this forum for people I can pass the favor on to. Thanks!
 
Back
Top