How to: Set Properties at Run Time
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:
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:
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 |
---|---|
THISFORMSET.frm1.cmd1.Caption = 'OK' |
In the event or method code of any control on any form in the form set except for frm1. |
THISFORM.cmd1.Caption = 'OK' |
In the event or method code of any control except for cmd1 on the same form that cmd1 is on. |
THIS.Caption = 'OK' |
In the event or method code of the control whose caption you want to change. |
THIS.Parent.BackColor = RGB(192,0,0) |
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:
PUBLIC glEditing glEditing = .F.
Then use an IIF expression in the Caption setting:
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:
* 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:
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:
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:
* form set saved in MYF_SET.SCX
myf_set.frmForm1.Show
myf_set.frmForm1.cmdButton1.SetFocus
To hide the form, issue this command:
myf_set.frmForm1.Hide
See Also
Tasks
How to: Pass Parameters to a Form