Partager via


MemberClass Property

Specifies the name of the member class to use when adding new members to a container. Read/write at design time and run time.

For a Column parent container and its header members, use the HeaderClass property instead of MemberClass.

Note   If the member class is based on a class that is stored in a program (.prg) file, make sure that the compiled program (.fxp) file is synchronized with the .prg file.

Object.MemberClass [ = cClassName ]

Property Values

  • cClassName
    Specifies the name of a member class in a program (.prg) or visual class library (.vcx) file.

Remarks

Visual FoxPro creates a member object using MemberClass under the following conditions:

  • MemberClass is specified for a container class definition at design time. When Visual FoxPro creates the container, it instantiates members using MemberClass.

  • The member object's Count property, such as the PageCount, ButtonCount, or ColumnCount properties, is increased at run time. If the member object's Count property is programmatically or interactively increased, Visual FoxPro adds new instances using MemberClass.

    Note   The ColumnCount property is unique in that you can specify its value as -1 or 0. All other Count properties must be greater than or equal to zero.

Both MemberClass and MemberClassLibrary support the Access and Assign methods and Public, Hidden and Protected scope.

A container can hold objects of different member classes with the same base class. For example, suppose you have a PageFrame object and two member classes, myPage1 and myPage2, defined as Page classes. You can specify myPage1 for the PageFrameMemberClass property at design time and change PageFrameMemberClass to myPage2 at run time, followed by an increase in the PageFramePageCount property.

The MemberClass and MemberClassLibrary properties have the following additional behaviors at design time and run time:

  • Behavior at design time

    When setting the MemberClass and MemberClassLibrary properties at design time, you are prompted to destroy existing member classes, including property settings; new, added, or modified method code; and added objects.

    When you create a subclass from a container that specifies the MemberClass property, the subclass inherits the proper MemberClass and MemberClassLibrary properties, which you can modify.

    Visual FoxPro displays the MemberClass and MemberClassLibrary properties in the Properties window as read-only. However, you can set these properties in the Properties window by clicking the ellipsis (...) button to display the Open dialog box, browsing for, and selecting the member class and class library you want to use.

    Note   If you want to specify a member class for the container, you must set, not only one, but both MemberClass and MemberClassLibrary properties.

    If you are setting the member object's Count property in a program (.prg) file at design time, you must specify the member object's Count property after setting the MemberClass and MemberClassLibrary properties because of certain dependencies. For example:

    DEFINE CLASS myPageFrame AS PageFrame
       MemberClassLibrary = 'MyPages.prg'
       MemberClass = 'myPage'
       PageCount = 3
    ENDDEFINE
    

    When using the ASELOBJ( ) function to set the MemberClass and MemberClassLibrary properties individually, the following behavior occurs:

    • If you specify only the MemberClass or MemberClassLibrary property using the ASELOBJ() function, Visual FoxPro does not generate an error but disregards the property specified and uses the base class when adding a new member object.

    • If the member object's Count property is 0 (or -1 for Grid objects), Visual FoxPro does not perform error checking when setting MemberClass and MemberClassLibrary, which you can set in any order.

    • If the member object's Count property is greater than 0, Visual FoxPro performs error checking when MemberClass is set. Therefore, in this situation, you need to set MemberClassLibrary before setting MemberClass.

      Note   If either property is invalid, Visual FoxPro generates the appropriate message if the class or class library is invalid and sets the member object's Count property back to 0.

      If both MemberClass and MemberClassLibrary are valid, Visual FoxPro recreates all existing member classes based on the new member class, and all previous member object data is lost.

      Caution   Visual FoxPro does not prompt you to destroy existing member classes, including property settings; new, added, or modified method code; and added objects when setting MemberClass and MemberClassLibrary in code.

      As when setting the member object's Count property in a program (.prg) file at design time, you must specify the member object's Count property after setting the MemberClass and MemberClassLibrary properties.

      You can change MemberClassLibrary to another class library that has the same MemberClass. If you increase the member object's Count property, Visual FoxPro adds a new member class using the new MemberClassLibrary. Though the designer displays member classes from different class libraries, only the most recent MemberClassLibrary persists when saving the class. Therefore, when you instantiate or open the class again, all member objects are created from the most recent MemberClassLibrary.

  • Behavior at run time

    Changing MemberClass and MemberClassLibrary affects only newly created member objects, not existing member objects in the container. You can also use the AddObject and NewObject methods, which function as usual, to specify a different class.

    Note   You should specify both MemberClass and MemberClassLibrary properties at run time. If you specify only MemberClass or MemberClassLibrary at run time, Visual FoxPro does not generate an error; however, it uses the base class when adding a new member and disregards the property specified.

    To reliably determine the member class used to instantiate a particular member object, use the Class and ClassLibrary properties of the member object instead of MemberClass and MemberClassLibrary because the latter properties can change at run time.

    Note   A container can have member objects derived from different member classes.

    Visual FoxPro does not support the capability to specify a class in a class library bound inside a compiled Visual FoxPro application (.app).

Example

The following example creates a form, adds a PageFrame container to the form, defines the PageFrame container as "myPageFrame", sets the MemberClassLibrary and MemberClass properties for "myPageFrame", defines a Page member object as "myPage", and adds code for a command button and events.

PUBLIC x
x = CREATEOBJECT("form")
x.ADDOBJECT("pf1","myPageFrame")
x.pf1.Visible = .T.
x.Show()

DEFINE CLASS myPageFrame AS PageFrame
   MemberClassLibrary = 'myPages.PRG'
   MemberClass = 'myPage'
   PageCount = 2
   TabOrientation = 1
ENDDEFINE

DEFINE CLASS myPage AS Page
   ADD OBJECT cmd1 AS commandbutton WITH ;
      Caption = "Hello", FontBold = .T.
   PROCEDURE Init
      THIS.Caption = "Funpage"+TRANSFORM(THIS.Parent.PageCount)
   ENDPROC
   PROCEDURE cmd1.Click
      MESSAGEBOX(this.Caption)
      THIS.Parent.Parent.PageCount = THIS.Parent.Parent.PageCount+1
   ENDPROC
ENDDEFINE

See Also

Member Classes | MemberClassLibrary Property | HeaderClass Property | HeaderClassLibrary Property | ASELOBJ( ) Function

Applies To: PageFrame Control | CommandGroup Control | OptionGroup Control | Grid Control