GizmoBlaster
asked on
How to REALLY unload a VB form from memory
I'm using VB 4 but I assume form unloading is the same for all versions.
My question is simple: my program loads another form for "preferences" setup and, when the user presses OK, I save changes and unload the form but, of course, it DOESN'T upload since, for some reason, Visual Basic forms never really unload unless you do "Set [myform] = Nothing"
But even when I do set to nothing, it DOES NOT unload since whenever I try to load the form again, the "Form_Load" procedure doesn't fire. It only fires the very first time I load the form. This is driving me crazy. Here is the code I'm using in the unload procedure:
Private Sub Form_Unload(Cancel As Integer)
t = WrapASetup
Unload ASetup
Set ASetup = Nothing
End Sub
What am I doing wrong?
Thanks!
My question is simple: my program loads another form for "preferences" setup and, when the user presses OK, I save changes and unload the form but, of course, it DOESN'T upload since, for some reason, Visual Basic forms never really unload unless you do "Set [myform] = Nothing"
But even when I do set to nothing, it DOES NOT unload since whenever I try to load the form again, the "Form_Load" procedure doesn't fire. It only fires the very first time I load the form. This is driving me crazy. Here is the code I'm using in the unload procedure:
Private Sub Form_Unload(Cancel As Integer)
t = WrapASetup
Unload ASetup
Set ASetup = Nothing
End Sub
What am I doing wrong?
Thanks!
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks for your comments so far but I would really prefer a solution that would allow me to REALLY unload that damn form. For all sorts of reasons... and one of the problem is I want to load new controls in the form_load event and if the form still shows a loaded status, it returns a control already loaded error.
I can't believe there is no way to really unload a form in VB, is there?
I can't believe there is no way to really unload a form in VB, is there?
In one of the events (not Form_UNLOAD) put
Unload ME
In the Unload event
Set ASetup = Nothing
How are you telling the form to unload?
mlmcc
Unload ME
In the Unload event
Set ASetup = Nothing
How are you telling the form to unload?
mlmcc
ASKER
The form unloads from various sources. Users click the X, they click OK (which spawns an unload event) and so on.
By the way, please guys stop telling me to not put the Unload command in the Unload procedure, I know it doesn't make much sense, it's just something desperate that I tried at the last minute.
The fundamental problem is, when my code does "Load Asetup" for the second time, it just doesn't show the Asetup form, it doesnt even trigger the "Activate" event. It does nothing...
By the way, please guys stop telling me to not put the Unload command in the Unload procedure, I know it doesn't make much sense, it's just something desperate that I tried at the last minute.
The fundamental problem is, when my code does "Load Asetup" for the second time, it just doesn't show the Asetup form, it doesnt even trigger the "Activate" event. It does nothing...
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
The unload statement in the unload event reloads the form.
Setting the form to nothing ensures the memory used by the form is freed up.
mlmcc
Setting the form to nothing ensures the memory used by the form is freed up.
mlmcc
How do you know the form load event isn't firing? What code do you have behind the event?
mlmcc
mlmcc
All you have to do is treat a form as if it were a class (which, behind the scenes, it is):
Check out http://www.geocities.com/r_larabee/class_idioms.html
Check out http://www.geocities.com/r_larabee/class_idioms.html
ASKER
Thanks for all those who answered. It didn't "really" allow me to do what I wanted to do, but at least it helped me understand a few things that I had overlooked about how to best load a form.
I split the points between the 3 most helpful answers.
I split the points between the 3 most helpful answers.
unload ASetup in another subroutine. Do you have a close or unload form button.
If you are closing the form by hitting the X then simply remove the unload line.
mlmcc