Click to See Complete Forum and Search --> : SCOPE Question
John Reynolds
July 10th, 2001, 09:10 AM
Say you have Module1, Form1, and ClassModuleA & ClassModuleB. I have instantiated Form1 from within Module1. I have instantiated ClassModuleA & ClassModuleB from within Form1.
I need to be able to read/write ClassModuleA's variables from within ClassModuleb. How do I do this? Do I need to instantiate the 2 classes from Module1 instead of Form1?
Is there a better way?
Thanks for any input!
John
phunkydude
July 10th, 2001, 11:53 AM
I can't say for sure that one way is better than the other, but as for good design, try this alternative (if it fits the picture):
Instantiate classA from classB, so that classB has the reference, it does seem to be the owner anyhow.
Then you also only need to instantiate classB from Form1.
HTH
John G Duffy
July 10th, 2001, 12:12 PM
The use of FRIEND Function type is designed to pass variables between classes.
Define a Friend Function in Class A for example then when Class B needs access to CLass A variables, It calls the Friend Function which returns the desired variable.
An example is enclosed, taken from Running COde
' Class A
friend property let CurrentPageNO(byval vData as Long)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.CurrentPageNO = 5
mvarCurrentPageNO = vData
End property
friend property get CurrentPageNO() as Long
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.print X.CurrentPageNO
CurrentPageNO = mvarCurrentPageNO
End property
''
'
' following is Class B code
'
'
' In this case CLass A is actually the Parent of Class B
CLass B retrieves Class A CurrentPageNo
frm.txtPage.Text = "Page " & Parent.CurrentPageNO & " of " & Parent.TotalPages
'
John G
Iouri
July 10th, 2001, 12:19 PM
Declare Public numeric constants in a Visual Basic class module
As you may know, Visual Basic doesn't allow public constants in a class
module. This is really too bad, because often you'll find it necessary
to declare constants that you can maintain and transfer along with the
class, but that are also available to the projects that use the class.
Well, the good news is that Visual Basic does provide a way to declare
public constants in a class module. The bad news is that you can only
do so with numeric constants.
However, if that works for you, then consider including a Public Enum
statement in your class. The Enum statement provides for enumeration
of variables. Both variables and parameters can be declared with an
Enum type. To use an Enum, you declare a type and fill it with elements.
If you provide constant values for the elements, then Visual Basic uses
those values. If you don't provide values, then Visual Basic starts
the list at 0 and increments each element's value by one. For instance,
with the following declaration:
Public Enum POPConstants
POP_CONNECT
POP_USER
POP_PASS
POP_STAT
POP_LIST
POP_RETRIEVE
POP_DELETE
POP_QUIT
End Enum
POP_CONNECT would be equal to 0, POP_USER 1, POP_PASS 2, and so on.
However, using the following declaration:
Public Enum POPConstants
POP_CONNECT = 2000
POP_USER = 3
POP_PASS = 10
POP_STAT = 4.5
POP_LIST = 7
POP_RETRIEVE
POP_DELETE
POP_QUIT
End Enum
the constants would equal the indicated values. Those constants without
a value would be one more than the previous variable. So, since POP_LIST
equals 7, POP_RETRIEVE woule be 8.
You can use public Enum constants just as you would any other constants,
like so:
Private Sub Command1_Click()
MsgBox POP_CONNECT & " " & POP_USER
End Sub
There's no need even to instantiate the class, since technically Visual
Basic doesn't consider Public Enum as members of a class, even though
they're written to the type library.
Iouri Boutchkine
iouri@hotsheet.com
codeguru.com
Copyright Internet.com Inc., All Rights Reserved.