[AccessD] Multiple Form Instances

John Skolits askolits at ot.com
Tue Oct 10 07:40:47 CDT 2006


Cool.

Makes sense.

Thanks!

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of JWColby
Sent: Tuesday, October 10, 2006 7:47 AM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Multiple Form Instances

John,

Not exactly...

A new form is opened two ways.  

1) Docmd.Openform "formname" is the one everyone knows.  This does NOT give
you a direct handle but can be found in the Forms("Formname").
2) The other way is to dimension a variable of the type form

Dim frm as form
	set frm = new form_FormName.  

Frm now contains a pointer to the form formname.

This whole process is a shortcut if you will, form_ simply tells VBA to look
in the documents collection where the CLASSES for forms are kept and then
use the part after the underscore as the NAME of the form class to open.
Opening a class opens the form.

While we are on the subject, I am guessing that if the form has the "no
module" property set, then it has no class and this method will not work.

So.... To reiterate:

Dim a variable of type form:

Dim frm as form

SET that variable to the CLASS for a specific form:

	set frm = new form_MyForm

You now have an OPENED form and a pointer to that form holding it open.  NOW
store that pointer into a collection using some name to index into the
collection:

Dim colMyForms as collection

	set colMyForms = new collection
	colMyForms.add frm, "MyFormName1"

	set frm = new form_MyForm
	colMyForms.add frm, "MyFormName2"

	set frm = new form_MyForm
	colMyForms.add frm, "MyFormName3"

You can now reference any specific form by getting the pointer to the form
back out of the collection:

Dim frm as form
	set frm = colMyForms("MyFormName1")
	frm!MyControl.Value = "Hello"

OR... You can use it in situ...

	colMyForms("MyFormName2")!MyControl.Value = "Hello again"

To summarize. A form can be opened more than one time, however only by
creating pointers to the form and STORING those pointers somewhere.  A
collection that we create for the purpose is a good place to save them, but
it can also be just a dimensioned variable of type form, somewhere in your
code.  

IMPORTANT!!! You MUST cleanup behind yourself in order to close such a form.
You can apparently close the form by clickint the close control in the
form's upper right, however it leaves stuff in VBA if you don't also delete
the POINTER to the form in the collection or in the variable that you dimmed
to hold the form pointer.

John W. Colby
Colby Consulting
www.ColbyConsulting.com

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of John Skolits
Sent: Tuesday, October 10, 2006 1:34 AM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Multiple Form Instances

Oh, I see. If you create a collection from within a form and then ad a new
form, it makes a new form of the one you're in. I get it.

Thanks for your help.

John


-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Shamil
Salakhetdinov
Sent: Monday, October 09, 2006 11:12 PM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Multiple Form Instances

John,

No, you don't need to design a new form from scratch by code.
You can use your form - just set its HasModule property to True if it
doesn't have any code behind.

--
Shamil
 
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of John Skolits
Sent: Tuesday, October 10, 2006 6:12 AM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Multiple Form Instances

I think that all makes pretty good sense.

But, will I have to actually design the new form from scratch through code?

My plan was to just grab an existing form and open it up many times just
changing the recordsource for each instance.

John




-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Shamil
Salakhetdinov
Sent: Monday, October 09, 2006 7:31 PM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Multiple Form Instances

John,

You cannot refer to such form instances by name - you have to use indexes in
global Access.Application.Forms collection or in your custom collection if
you put form's instances object references in it as I have shown in the
code. BTW, you HAVE to put form instance's object reference somewhere after
you open it "object way" (as shown in the code) otherwise it will be closed
immediately after your code leaves the sub/function where form is opened
this object way except the case when your form is modal - for this latter
case your code will "get stuck" at the point:

frm.visible = true

If you wanted to refer to your forms' instances using mnemonic names like
e.g:

- PriceByDefectiveMaterialForm
- PriceByDefectiveSolderForm
- PriceByDefectiveWiringForm
- ...

Then you can use these mnemonic names while putting forms' instances object
refs into collection:

col.add frm, "PriceByDefectiveMaterialForm"
....

... and then somewhere in other part of your code ...
Set frm = col("PriceByDefectiveMaterialForm")

etc.

Of course col collection should be (custom class) module level variable...

--
Shamil
 

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of John Skolits
Sent: Tuesday, October 10, 2006 1:52 AM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Multiple Form Instances

Then can I refer to the form object"frm" to set it's individual properties?

Is there a way to then name that form object in case I have a few open and
want to make change in one particular form?

Or will they just be enumerated frm(0), frm(1) etc?

John


-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Shamil
Salakhetdinov
Sent: Monday, October 09, 2006 5:49 PM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Multiple Form Instances

Yes, John, you can have multiple form instance opened at once - just make
sure they have a form module or HasModule property set to true and then use
(let's say your form's name is myForm):

Dim col as new collection
Dim frm as new myForm

col.add frm
frm.visible = true

Similar way multiple instances of reports can be opened.


--
Shamil
 
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of John Skolits
Sent: Tuesday, October 10, 2006 1:30 AM
To: 'Access Developers discussion and problem solving'
Subject: [AccessD] Multiple Form Instances


I think there is a way to do this.

Can I have multiple instances of the same form.

I have form with a chart on it. I want to show multiple instances of this
same form but I'll provide a different data source for the chart.

This way if I need to do:

Price By Defective Material
Price by Defective Solder
Price By Defective Wiring
....

(About 20 options) 

I don't need 20 forms.
I still want to give them the ability to have any number on the screen at
the same time.

I'm also guessing if I can do this forms, I should be able to do this with
reports as well.

John



--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com


-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com


-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com


-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com





More information about the AccessD mailing list