The object model in Visual FoxPro makes it possible for you to control form properties at run time.
Referencing Objects in the Object Hierarchy
To manipulate an object in code, you need to identify it in relation to the container hierarchy. At the highest level of the container hierarchy, that is, the form or form set, you need to reference the object variable. Unless you use the NAME clause of the DO FORM Command, the object variable has the same name as the form (.scx) file.
To manipulate properties
-
In code, reference the object variable, the control, and then the property with the dot (.) operator as a separator and using the following format:
ObjectVariable.[Form.]Control.Property = Setting
The following table lists properties or keywords that make it easier to reference an object in the object hierarchy.
Property or keyword | References |
---|---|
The control on the currently active form that has the focus. |
|
The currently active form. |
|
The active page on the currently active form. |
|
The immediate container of the object |
|
The object or a procedure or event of the object. |
|
The form that contains the object. |
|
The form set that contains the object. |
For example, to change the caption of a command button on the form frmCust
in a form set stored in Custview.scx, use the following command in a program or in the Command window:
В | Copy Code |
---|---|
CustView.frmCust.cmdButton1.Caption = "Edit" |
Use the THIS, THISFORM, and THISFORMSET keywords to reference objects from within a form. For example, to change the Caption of a command button when the command button is clicked, include the following command in the Click event code for the command button:
В | Copy Code |
---|---|
THIS.Caption = "Edit" |
The following table gives examples of using THISFORMSET, THISFORM, THIS, and Parent to set object properties:
Command | Where to include the command |
---|---|
|
In the event or method code of any control on any form in the form set except for |
|
In the event or method code of any control except for |
|
In the event or method code of the control whose caption you want to change. |
|
In the event or method code of a control on a form. The command changes the background color of the form to dark red. |
Setting Properties at Run Time with Expressions
You can also set properties at run time using expressions or functions.
To set properties to expressions at run time
-
Assign an expression to the property.
-or-
-
Assign the result of a user-defined function to the property.
For example, you could set the caption of a button to be Edit or Save, depending on the value of a variable. Declare the variable in the calling program for your form:
В Copy Code PUBLIC glEditing glEditing = .F.
Then use an IIF expression in the Caption setting:
В Copy Code frsSet1.frmForm1.cmdButton1.Caption = ; IIF(glEditing = .F., "Edit", "Save")
You could determine the size of a button and set the caption using expressions with fields in a table:
В | Copy Code |
---|---|
* set button width to length of 'Call ' + first and last names frmForm1.cmdButton1.Width = 5 + ; LEN(ALLTRIM(employee.first_name + " " + employee.last_name)) * set button caption to 'Call ' + first and last names frmForm1.cmdButton1.Caption = "Call " + ; ALLTRIM(employee.first_name + " " + employee.last_name) |
You could also set the caption using a user-defined function:
В | Copy Code |
---|---|
frsSet1.frmForm1.cmdButton1.Caption = setcaption() |
Setting Multiple Properties
You can set multiple properties at once.
To set multiple properties
-
Use the WITH ... ENDWITH Command structure.
For example, to set multiple properties of a column in a grid in a form, you could include the following statement in any event or method code in the form:
В Copy Code WITH THISFORM.grdGrid1.grcColumn1 .Width = 5 .Resizable = .F. .ForeColor = RGB(0,0,0) .BackColor = RGB(255,255,255) .SelectOnEntry = .T. ENDWITH
Calling Methods at Run Time
After an object is created, you can call the methods of that object from anywhere in your application.
To call a method for an object
-
Use the following syntax:
Parent.Object.Method
For example, the following code calls methods to display a form and set the focus to a command button:
В | Copy Code |
---|---|
* form set saved in MYF_SET.SCX myf_set.frmForm1.Show myf_set.frmForm1.cmdButton1.SetFocus |
To hide the form, issue this command:
В | Copy Code |
---|---|
myf_set.frmForm1.Hide |