?
Solved

Creating controls on the fly

Posted on 2011-03-25
7
Medium Priority
?
260 Views
Last Modified: 2012-05-11
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.
0
Comment
Question by:andyw27
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
7 Comments
 
LVL 77

Expert Comment

by:peter57r
ID: 35216499
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
0
 
LVL 85
ID: 35216502
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)

0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 35216527
ditto with LSM
0
The Eight Noble Truths of Backup and Recovery

How can IT departments tackle the challenges of a Big Data world? This white paper provides a roadmap to success and helps companies ensure that all their data is safe and secure, no matter if it resides on-premise with physical or virtual machines or in the cloud.

 

Author Comment

by:andyw27
ID: 35216672
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
0
 
LVL 77

Expert Comment

by:peter57r
ID: 35216945
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)
0
 
LVL 74

Expert Comment

by:Jeffrey Coachman
ID: 35217108
^

Yes, it is always helpful to state *Why* you need to do this, ...perhaps there is a better alternative...
0
 
LVL 85

Accepted Solution

by:
Scott McDaniel (Microsoft Access MVP - EE MVE ) earned 2000 total points
ID: 35217340
You may have to do this:

Forms!Form1.Controls("cbo" & Cstr(intKey))

While Access is very good about casting and converting, I've had issues in the past referring to controls in that fashion. Probably a fluke, but I got into the habit of using the Cstr conversion when doing this.
0

Featured Post

The Eight Noble Truths of Backup and Recovery

How can IT departments tackle the challenges of a Big Data world? This white paper provides a roadmap to success and helps companies ensure that all their data is safe and secure, no matter if it resides on-premise with physical or virtual machines or in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

AutoNumbers should increment automatically, without duplicates.  But sometimes something goes wrong, and the next AutoNumber value is a duplicate.  This article shows how to recover from this problem.
Access developers frequently have requirements to interact with Excel (import from or output to) in their applications.  You might be able to accomplish this with the TransferSpreadsheet and OutputTo methods, but in this series of articles I will di…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Learn how to number pages in an Access report over each group. Activate two pass printing by referencing the pages property: Add code to the Page Footers OnFormat event to capture the pages as there occur for each group. Use the pages property to …
Suggested Courses

764 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question