Getting detailed information about the class – PB Docs 150

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 PowerBuilder
system objects, so the Ancestor property can hold a ClassDefinition
object for a PowerBuilder 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.

note.png NestedClassList 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
note.png Class definitions for object instances as distinct
from 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 PowerBuilder
programming techniques to get and store references to your instantiated
objects.


Document get from Powerbuilder help
Thank you for watching.
Was this article helpful?
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x