Link to home
Start Free TrialLog in
Avatar of andyw27
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.
Avatar of peter57r
peter57r
Flag of United Kingdom of Great Britain and Northern Ireland image

You apply a recordset to a Form , not a control.

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
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)

ditto with LSM
Avatar of andyw27
andyw27

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
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)
^

Yes, it is always helpful to state *Why* you need to do this, ...perhaps there is a better alternative...
ASKER CERTIFIED SOLUTION
Avatar of Scott McDaniel (EE MVE )
Scott McDaniel (EE MVE )
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial