CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4

Thread: SCOPE Question

  1. #1
    Join Date
    Sep 2000
    Posts
    200

    SCOPE Question

    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


  2. #2
    Join Date
    Aug 2000
    Location
    Namibia
    Posts
    139

    Re: SCOPE Question

    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


  3. #3
    Join Date
    Apr 2000
    Location
    South Carolina,USA
    Posts
    2,210

    Re: SCOPE Question

    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

  4. #4
    Join Date
    May 2000
    Location
    New York, NY, USA
    Posts
    2,878

    Re: SCOPE Question

    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
    [email protected]
    Iouri Boutchkine
    [email protected]

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured