?
Solved

Moving ALL of Form's procs into Module Save Mem?

Posted on 1999-01-19
4
Medium Priority
?
146 Views
Last Modified: 2010-05-03
I am interested in making a program that can create tons of instances of a particular form. I do this like so:

Dim MyFormInstances() as Form1

Redim MyFormInstances(10)
Set MyFormInstances(0) = New Form1

In Form1 i have TONS of procedure calls: some my own, some "events" that i am handling. I was wondering though, if i am creating several nstances of the same form ("Form1" in this case) would each of these procedures that were inside the form1 be duplicated into each of these instances?  If so wouldnt this mean each instance would continue to use more and more memory?

If so then would it be wiser to rewrite and move ALL of my procedures (and functions) that exist in the Form1 into a Module and pass to the module's proc's/func's the Form who is requesting the information..Like this:

----
FORM1 CODE:

Public MyValue as integer

private sub FORM1_CLICK()
  'Me is VB's term for the current form -- in this case, the instance
  Call Module_FORM1_CLICK(Me)
end sub

------
MODULE CODE:

public sub Module_FORM1_CLICK(Form as Form1)
  Form.MyValue = 1
end sub

----

I would do this with EVERY procedure that existed inside FORM1. I know this wouldn't eliminate the possibilty of using more and more memory but at least (as it appears) it will reduce it significantly.  PLEASE LET ME KNOW IF THIS IS CORRECT or if Windows handles this.  Please explain in detail please.  
0
Comment
Question by:ljaques
[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
  • 2
4 Comments
 
LVL 4

Expert Comment

by:mcix
ID: 1469473
There is a certain amount of over-head associated with each instance of a form.  Memory consumption on multiple instances of a form is more dependent on the number of controls on the form rather than the underlying code.  The Code is loaded into memory as it is executed.  If you have a lot of form level variables, it could become more intensive with each new instance.

Instead of using your own array (MyFormInstances())

Try declaring a new instance like this:

Dim moForm1 As Form1
   
Set moForm1 = Forms.Add("Form1")
moForm1.Visible = True

You can then refer to the VB forms collection:

MsgBox Forms.Count
MsgBox Forms(0).Caption




0
 
LVL 10

Accepted Solution

by:
caraf_g earned 40 total points
ID: 1469474
I wouldn't recommend doing what you're thinking of doing - it goes against all proper "object - oriented" design.

Just imagine the sort of trouble you're getting yourself into: you will no longer be able to access any of your form's Private variables, procedures and properties, for starters.

Even if you wanted to access your form's Public vars etc, you will have to modify each and every procedure so that you pass in an extra parameter as an object variable so that you can pass in Me when you call it from your form.

Finally, for dealing with Object type variables you are probably better off using a Collection rather than an array.

0
 

Author Comment

by:ljaques
ID: 1469475
So, by using the Collections object i can save MASSIVE amounts of memory or is it just a good way of keeping things organized?!?
0
 
LVL 10

Expert Comment

by:caraf_g
ID: 1469476
You won't be able to save massive amounts of memory and your solution causes more problems than it will solve.

Using a collection is just a good way of keeping things organised.
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Introduction While answering a recent question about filtering a custom class collection, I realized that this could be accomplished with very little code by using the ScriptControl (SC) library.  This article will introduce you to the SC library a…
Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
Suggested Courses

800 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