Lisp
asked on
Object Variable Declaration
If I declare and instanciate a specific object variable (using early binding) in the general declaration area of a form, when is that object created?
Assuming the type of project is an Active X Document (if that makes any difference).
ie
Dim objie as New InernetExplorer
Is it when the application is first openned? When before or after form is first initialised?
When Internet Explorer is first openned?
Assuming the type of project is an Active X Document (if that makes any difference).
ie
Dim objie as New InernetExplorer
Is it when the application is first openned? When before or after form is first initialised?
When Internet Explorer is first openned?
When the form is initialized(loaded into the memory - before Form_Load)
ASKER
Do you mean before the initialise event is fired or after?
Before
ASKER
According to the MCSD 70-176 practice exam from UCertify it occurs when the object is first used.
This makes no sense to me. Another question they had related to the CDROM AutoRun feature and it said you had to change the name of your setup.exe file to autorun.exe. There is a reference to this in MSDN but I think it is some ancient way of doing it. Apparently that's how it was done on the windows 95 CD.
Can anybody please verfy this?
This makes no sense to me. Another question they had related to the CDROM AutoRun feature and it said you had to change the name of your setup.exe file to autorun.exe. There is a reference to this in MSDN but I think it is some ancient way of doing it. Apparently that's how it was done on the windows 95 CD.
Can anybody please verfy this?
Hello Lisp !
You can find it out by yourself by setting a breakpoint in the Class_initialize event.
V.K.
You can find it out by yourself by setting a breakpoint in the Class_initialize event.
V.K.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Yes it is counter intuitive, but that's how it works. Best practice is to explicitly create your object in your code rather than use the above method of implicit instantiation. In other words, use
Dim o as clsMyObj
Set o = New clsMyObj
instead of:
Dim o as New clsMyObj
There are a few good reasons to do this. One is that referring to an uninstantiated variable NOT declared with New will raise an error, allowing you to see clearly where you are using said object. Declaring with new makes it hard to know that an object has been released, as any reference to it will not return an error and testing If o Is Nothing will never return true.
Dim o as clsMyObj
Set o = New clsMyObj
instead of:
Dim o as New clsMyObj
There are a few good reasons to do this. One is that referring to an uninstantiated variable NOT declared with New will raise an error, allowing you to see clearly where you are using said object. Declaring with new makes it hard to know that an object has been released, as any reference to it will not return an error and testing If o Is Nothing will never return true.
I agree with Paul, besides....
Dim objie as New InernetExplorer
sub test()
objie.visible=true ' or whatever: here is created a shown
end sub
Dim objie as New InernetExplorer
sub test()
objie.visible=true ' or whatever: here is created a shown
end sub
All this actually makes sense for the same reason that dlls work the way they do--only use what you need.
If you have two forms, and never load the second, does it make sense for your project to load it? Of course not.
However, if you have two forms and the second one takes a long time to load, you have the choice of when to load it--either when the user needs if, or when the application begins (via code.)
--
When does an object get loaded? I would say (based on experience with user controls) that it works as follows:
(Event) Initialize container
1.identify all pieces of memory associated with the container/form (essentially variables)
2.fire initializeproperty event
Initialize Property
1.load all controls/objects
2.load all persistent data for these controls from a property bag
3.fire load event
Load
1.gather information about object properties, methods and events
2.if needed, fire the show/paint event
Show
1.set object properties to visible and enabled (if not told otherwise
2.paint the control's appearance into the correct location
3.fire activate event
Activate
1.set the window to be the primary window, and to receive events by default
2.wait for user interaction or other events
If you have two forms, and never load the second, does it make sense for your project to load it? Of course not.
However, if you have two forms and the second one takes a long time to load, you have the choice of when to load it--either when the user needs if, or when the application begins (via code.)
--
When does an object get loaded? I would say (based on experience with user controls) that it works as follows:
(Event) Initialize container
1.identify all pieces of memory associated with the container/form (essentially variables)
2.fire initializeproperty event
Initialize Property
1.load all controls/objects
2.load all persistent data for these controls from a property bag
3.fire load event
Load
1.gather information about object properties, methods and events
2.if needed, fire the show/paint event
Show
1.set object properties to visible and enabled (if not told otherwise
2.paint the control's appearance into the correct location
3.fire activate event
Activate
1.set the window to be the primary window, and to receive events by default
2.wait for user interaction or other events
ASKER
Thanks. This was confusing the hell out of me.