andyw27
asked on
Creating controls on the fly
Hi,
I have a couple of questions about creating controls at runtime.
My logic is this:
1. Create a new form
2. on new form create new controls (combo)
3. the code for creating these controls is within a loop
4. set the recordset of the controls for each control during each pass of the loop
So far I managed to do steps 1,2,3. However I cannot set up the recordset.
Here is the code I have:
' Create new form with Orders table as its record source.
Set frm = CreateForm
' Set positioning values for new controls.
intLabelX = 100
intLabelY = 100
intDataX = 1000
intDataY = 100
For intCounter = 1 To 10
' Create unbound default-size text box in detail section.
Set ctlText = CreateControl(frm.Name, acComboBox, , "", "", _
intDataX, intDataY)
ctlText.Name = intCounter
intDataY = intDataY + 400
ctlText.Recordset = GetADORecordset("SELECT receipt_number, running_qty, identifier, order_number FROM " & _
"tbl_receipt")
' Create child label control for text box.
Set ctlLabel = CreateControl(frm.Name, acLabel, , _
ctlText.Name, "NewLabel", intLabelX, intLabelY)
intLabelY = intLabelY + 400
Next
Questions:
1. What is best way to set up the recordset of each of the controls
2. Can the form name be sepcififed (defaults to Form1, Form2, etc…) I’ve tried frm.name = “new name” however it gives a read only message.
Many Thanks.
I have a couple of questions about creating controls at runtime.
My logic is this:
1. Create a new form
2. on new form create new controls (combo)
3. the code for creating these controls is within a loop
4. set the recordset of the controls for each control during each pass of the loop
So far I managed to do steps 1,2,3. However I cannot set up the recordset.
Here is the code I have:
' Create new form with Orders table as its record source.
Set frm = CreateForm
' Set positioning values for new controls.
intLabelX = 100
intLabelY = 100
intDataX = 1000
intDataY = 100
For intCounter = 1 To 10
' Create unbound default-size text box in detail section.
Set ctlText = CreateControl(frm.Name, acComboBox, , "", "", _
intDataX, intDataY)
ctlText.Name = intCounter
intDataY = intDataY + 400
ctlText.Recordset = GetADORecordset("SELECT receipt_number, running_qty, identifier, order_number FROM " & _
"tbl_receipt")
' Create child label control for text box.
Set ctlLabel = CreateControl(frm.Name, acLabel, , _
ctlText.Name, "NewLabel", intLabelX, intLabelY)
intLabelY = intLabelY + 400
Next
Questions:
1. What is best way to set up the recordset of each of the controls
2. Can the form name be sepcififed (defaults to Form1, Form2, etc…) I’ve tried frm.name = “new name” however it gives a read only message.
Many Thanks.
You have to "set" a recordset. Assuming your GetADORecordset returns an ADO recordset:
Set ctl.Recordset = GetADORecordset(blah blah)
I'm not sure about the form name. I long ago gave up trying to do things of this nature, due to the troubles accompanied with the methods (i.e. instability, decompilation, etc etc)
Set ctl.Recordset = GetADORecordset(blah blah)
I'm not sure about the form name. I long ago gave up trying to do things of this nature, due to the troubles accompanied with the methods (i.e. instability, decompilation, etc etc)
ditto with LSM
ASKER
Yes I agree, not the perfect solution.
It would work okay if I could change this to include a variable:
Forms!Form1.cbo & intKey
so it would like this to the system:
Forms!Form1.cbo1
It would work okay if I could change this to include a variable:
Forms!Form1.cbo & intKey
so it would like this to the system:
Forms!Form1.cbo1
To do
Forms!Form1.cbo & intKey
you do..
Forms!Form1.controls("cbo" & intKey)
(I will just add my agreement to the previous 'don't do this' comments. It would be a 'last resort' for me to use this approach)
Forms!Form1.cbo & intKey
you do..
Forms!Form1.controls("cbo"
(I will just add my agreement to the previous 'don't do this' comments. It would be a 'last resort' for me to use this approach)
^
Yes, it is always helpful to state *Why* you need to do this, ...perhaps there is a better alternative...
Yes, it is always helpful to state *Why* you need to do this, ...perhaps there is a better alternative...
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
The controlsource is just the field name from the recordset.
Look here for some sample code:
http://msdn.microsoft.com/en-us/library/aa221170(office.11).aspx