Getting detailed information about the class

This section has code fragments illustrating how to get information from a ClassDefinition object called cd_windef.

For examples of assigning a value to cd_windef, see “Getting a class definition object.”

Library

The LibraryName property reports the name of the library a class has been loaded from:

s = cd_windef.LibraryName

Ancestor

The Ancestor property reports the name of the class from which this class is inherited. All objects are inherited from PocketBuilder system objects, so the Ancestor property can hold a ClassDefinition object for a PocketBuilder class. The Ancestor property contains a null object reference when the ClassDefinition is for PowerObject, which is the top of the inheritance hierarchy.

This example gets a ClassDefinition object for the ancestor of the class represented by cd_windef:

ClassDefinition cd_ancestorwindef
cd_ancestorwindef = cd_windef.Ancestor

This example gets the ancestor name. Note that this code would cause an error if cd_windef held the definition of PowerObject because the Ancestor property would be null:

ls_name = cd_windef.Ancestor.Name

Use the IsValid function to test that the object is not null.

This example walks back up the inheritance hierarchy for the window w_genapp_frame and displays a list of its ancestors in a MultiLineEdit:

string s, lineend
ClassDefinition cd
lineend = "~r~n"

cd = cd_windef
s = "Ancestor tree:" + lineend

DO WHILE IsValid(cd)
   s = s + cd.Name + lineend
   cd = cd.Ancestor
LOOP

mle_1.Text = s

The list might look like this:

Ancestor tree:
w_genapp_frame
window
graphicobject
powerobject

Parent

The ParentClass property of the ClassDefinition object reports the parent (its container) specified in the object’s definition:

ClassDefinition cd_parentwindef
cd_parentwindef = cd_windef.ParentClass

If the class has no parent, ParentClass is a null object reference. This example tests that ParentClass is a valid object before checking its Name property:

IF IsValid(cd_windef.ParentClass) THEN
   ls_name = cd_windef.ParentClass.Name
END IF

Nested or child classes

The ClassDefinition object’s NestedClassList array holds the classes the object contains.

NoteNestedClassList array includes ancestors and descendants The NestedClassList array can include classes of ancestor objects. For example, a CommandButton defined on an ancestor window and modified in a descendent window appears twice in the array for the descendent window, once for the window and once for its ancestor.

This script produces a list of the controls and structures defined for the window represented in cd_windef.

string s, lineend
integer li
lineend = "~r~n"

s = s + "Nested classes:" + lineend

FOR li = 1 to UpperBound(cd_windef.NestedClassList)
   s = s + cd_windef.NestedClassList[li].Name &
      + lineend
NEXT
mle_1.Text = s

This script searches the NestedClassList array in the ClassDefinition object cd_windef to find a nested DropDownListBox control:

integer li
ClassDefinition nested_cd

FOR li = 1 to UpperBound(cd_windef.NestedClassList)
   IF cd_windef.NestedClassList[li].DataTypeOf &
      = "dropdownlistbox" THEN
      nested_cd = cd_windef.NestedClassList[li]
      EXIT
   END IF
NEXT

NoteClass definitions for object instances versus object references Getting a ClassDefinition object for an instantiated object, such as an ancestor or nested object, does not give you a reference to instances of the parent or child classes. Use standard PocketBuilder programming techniques to get and store references to your instantiated objects.