Lets talk about a METHOD of the
you have a pushbutton named pbQuit and you want to create a
that responds to the button when you click it, call the Form Designer, select the
and in the Property Inspector, click the Events tab,
to the event named onClick and
click the wrench icon on the right hand side. That
the skeleton of a method in the Source Editor named
which you can write
your performance code. Importantly, at the same time the following
is automatically written into the constructor code for pushbutton pbQuit.
onClick = class::PBQUIT_ONCLICK
This is the code that tells the pbQuit control object where to find the function, ( same as procedure in the Windows versions of dBASE), that should be performed when the object is clicked. The :: symbol is called a resolution operator and in this case tells the object that the function is in the same class that defines the object. If the class is a form, then the automatically generated FORM reference form.<objectName> goes to the same place.
Now, how to handle a method
that will respond to
more than one control object? A classic example is a set of three
related radio buttons. The operative event is
time you click one
of the buttons its onChange event
fires but so does the onChange event
of the previously selected radio button. So what you would like
have is one event handler, (method), where you can code what you want
occur when any one of them is clicked. With a form open in design
mode and the radio buttons already named, click on the Method menu
item and then click on New Method. The Source editor will
create a skeleton method named function
the function’s name
to something that means something like function
the radio buttons are
changing what you define as a mode. Write your code to catch only
the radio button that is newly selected and what you want to happen.
if this.value // only the newly selected button’s value is true
case this.name == "RADIOBUTTON1"
// action code
case this.name == "RADIOBUTTON2"
// action code
case this.name == "RADIOBUTTON3"
// action code
THIS is an automatically generated reference possessed by every object that identifies itself when making a method call, (similar to Sender used by several other languages).
After setting up the method as described above, and while the cursor is still within the method in the Source Editor, click on the Method menu item and then click on Link Event. A dialog box opens in which you can select the object and the object event that will call the method. In this example select the radiobutton1 object and its onChange event and click OK. Repeat for radiobutton2.onChange() and radiobutton3.onChange(). This dialog writes the appropriate calling code into EACH control object constructor code to call your common method just as described earlier for a single pushbutton object calling a single onClick() method.
Also, you can write a
procedure, (that is not a
method of the class) within the same form. Here is an example you can
and run. Open a new form in the Form designer and place one
on it. In the Source Editor, scroll all the way to the
or click on the bottom
icon in the left treeview pane. Below the endclass statement enter the following function:
? "This is a test"
Select the pushbutton and
select the wrench
for the onClick event
in the Property Inspector. Complete the auto-generated
so it reads…
The parenthesis () following writeTest is the procedure/function CALL operator. Now when you run the form and click the button: “This is a test” will be written to the dBASE Command Window Results Pane. This is a contrived example because it obviously is more work to set up this way than to just enter ? "This is a test" directly in the PUSHBUTTON1_onClick() event handler, (method).
Finally, if you have a
you wanted to call from another file such as
.WFM you simply have
to create a
reference to it. For example, in the Form’s onOpen event you could enter…
set procedure to StringBox.cc additive
Thereafter, anywhere you need
to call a function
named AllTrim() from
code would look like:
aString = " Some Text "
aTrimmedString = AllTrim( aString )
? aTrimmedString // displays "Some Text"
Note that the Additive qualifier in the Set Procedure command that was introduced in Windows versions does just what it says without clearing any other procedures already referenced. Failure to use the Additive qualifier is one of the most frequent reasons for code failure in the Windows versions because it destroys all previously initiated procedure links.
Hope it helps.