对象在现实生活中是很常见的,例如,一个人是一个对象,一台PC机也是一个对象。如果将一台PC机拆开来看,便有“显示器、机箱、软盘驱动器、硬盘、键盘、鼠标器……”,每一个又都是一个对象,即PC机对象是由多个“子”对象组成的。此时,PC机又称为一个容器(Container)对象。在可视化编程中,对象是应用程序的基本元素。
从可视化编程的角度来看,对象是一个具有属性(数据)和方法(行为方式)的实体。一个对象建立以后,其操作就通过与该对象有关的属性、事件和方法来描述。
属性(Propeny)是指对象的一项描述内容,用来描述对象的一个特性,不同的对象有不同的属性,而每个对象又都由若干属性来描述。在可视化编程中,常见的属性有标题(Caption)、名称(Name)、背景色(Backcolor)、字体大小(FontSize)、是否可见(Visible)等。通过修改或设置某些属性,便能有效地控制对象的外观和操作。
属性值的设置或修改可以通过属性窗口来进行,也可以通过编程的方法在程序运行的时候来改变对象的属性。在程序中设置属性的一般格式是:
Parent.Object.Property=Value
即:表单名.对象名.属性名=属性值。
由于每个对象可以有多个属性,进行设置时写出全部路径非常麻烦,而且容易出错,所以Visual FoxPro提供了另一个设置对象属性值的语句,其格式如下:
WITH <路径>
<属性>
ENDWITH
注意:属性名如果是系统类的标准属性名,在编辑这些属性名时,自动呈蓝色显示,否则为用户自定义属性。
例如,给一个表单对象“MyForm”设置属性值,代码如下:
myForm.Caption="显示窗口"
myForm.Height=100
myForm.Left=60
myForm.Name="myForm"
myForm.Top=100
myForm.Width=300
也可写成如下形式:
WITH myForm
.Caption="显示窗口"
.Height=100
.Left=60
.Name="myForm"
.Top=100
.Width=300
ENDWITH
事件(Event)是由Visual FoxPro预先定义好的、能够被对象识别的动作,如单击(C1ick)事件、双击(DblClick)事件、装入(Load)事件、移动鼠标(MouseMove)事件等,不同的对象能识别的事件不尽相同。对象的事件是固定的,用户不能建立新的事件。为此,Visual FoxPro提供了丰富的内部事件,这些事件足以应付Windows中的绝大部分操作需要。
事件过程(Event Procedure)是为处理特定事件而编写的一段程序。当事件由用户触发(如Click)或由系统触发(如Load)时,对象就会对该事件做出响应(Respond)。响应某个事件后所执行的程序代码就是事件过程。
表7-1给出了Visual FoxPro中常用的事件,以及每个事件的激活条件。
表7-1 常用事件及激活条件
事 件 |
激活条件 |
Init |
对象被创建时 |
Destroy |
对象从内存中释放时 |
error |
类中的事件或方法过程中发生错误时 |
Load |
表单或表单集被加载到内存中 |
Unload |
从内存中释放表单或表单集 |
DbClick |
用鼠标左键双击对象 |
RightClick |
用鼠标右键单击对象 |
MouseDown |
在对象上按下鼠标的按键 |
MouseUp |
在对象上释放鼠标的按键 |
MouseMove |
在对象上移动鼠标 |
KeyPress |
用户按下并且释放了一个按键 |
PogrammaticChange |
在程序中改变对象的值 |
Click |
用鼠标左键单击对象 |
GetFocus |
按TAB键或单击对象,或在程序中调用SetFocus方法,使对象接受输入焦点 |
LostFocus |
对象失去输入焦点 |
InteractiveChange |
以交互方式改变对象的值 |
在Visual FoxPro中,一个动作可能触发一个对象的多个事件或多个对象的多个事件,每个事件的发生是有其先后次序的。表7-2中列出了一个动作可能触发的事件及先后顺序关系。
表7-2 动作触发的事件及其触发顺序
动 作 |
发生的事件及先后顺序 |
单击对象 |
When,GotFocus,MouseDown,MouseUp,Click |
双击对象 |
When,GotFocus,MouseDown,MouseUp,Click,DbClick |
单击表单 |
表单的Activate、MouseDown,表单中第一个对象的When、 GotFocus,表单的MouseUp、Click |
单击列表框 |
MouseDown,MouseUp,interactiveChangeClick |
单击表格控件中的另外的单元格 |
BeforeRowColChange,MouseDown,MouseUp, AfterRowColChange,Click |
在Visual FoxPro中,要查看事件的触发顺序,可单击菜单“工具”→“调试器”命令打开如图7-1所示的“调试器”窗口,然后在该窗口中单击菜单“工具”→“事件跟踪”命令打开“事件跟踪”对话框,并勾选“开启事件跟踪”复选框,如图7-2所示。
图7-1 “调试器”窗口 图7-2 “事件跟踪”对话框
Visual FoxPro中的应用程序必须要创建一个事件循环,事件循环由READ EVENTS命令建立,CLEAR EVENTS命令则停止事件处理。在应用程序中必须保证CLEAR EVENTS命令能够被调用到,否则程序将进入死循环。
方法(Method)是与对象相关联的过程,但又不同于一般的Visual FoxPro过程。方法程序紧密地和对象连接在一起,并且与一般Visual FoxPro过程的调用方式也有所不同。
与事件过程类似,Visual FoxPro的方法属于对象的内部函数,只是方法用于完成某种特定的功能而不一定响应某一事件,如添加对象(Addobject)方法、绘制矩形(Box)方法、释放表单(Release)方法等。方法也被“封装”在对象中,不同的对象具有不同的内部方法。在Visual FoxPro中提供了上百个内部方法供不同的对象调用。
与事件过程不同的是,根据需要可由用户自行建立新方法。
调用方法的格式为:引用对象.方法程序。
事件过程由事件的激发而调用其代码,也可以在运行中由程序调用其代码,而方法的代码只能在运行中由程序调用。只有当事件发生后,对应的事件代码才会被执行。
在程序中调用事件代码的格式是:
表单名.对象名.事件名
在程序中调用对象方法的格式是:
[[<变量名>]=]表单名.对象名.方法名
例如,隐藏和显示表单对象的方法,代码如下:
myForm.HIDE() &&隐藏表单
myForm.SHOW() &&显示表单
作为应用程序的用户界面,表单上可以包含许多对象,而这些对象又有可能具有互相包含的层次关系。若要引用一个对象,需要知道它相对于容器层次的关系。例如,如果要在表单集中处理一个表单的控件,则需要引用表单集、表单和控件。
它是通过提供对象的完整容器层次来引用对象,若要使表单中的控件无效,需要提供以下地址:
Formset.Form.PageFrame.Page.Grid.Column.Control.Enabled=.F.
是指在容器层次中引用对象时,可以通过快捷方式指明所要处理的对象。例如,
(1)THISFORMSET.Frml.Cmdl.Caption="关闭":表示将本表单集Frml表单中Cmdl对象的标题(Caption)属性设置为“关闭”。
(2)THISFORM.Cmdl.Caption="关闭":表示将本表单的Cmdl对象的标题(Caption)属性设置为“关闭”。
(3)THIS.Caption="关闭":对于需要改变标题的控件,表示将本对象的标题(Caption)属性设置为“关闭”。
(4)THIS.Parent.BackColor=RGB(192,0g0):将本对象的父对象背景色设置为暗红色。
表7-3给出了引用对象的属性和关键字。
表7-3 引用对象的属性和关键字
属性和关键字 |
说 明 |
ActiveControl |
当前活动表单中具有焦点的控件 |
ActiveForm |
当前活动表单 |
ActivePage |
当前活动表单中的活动页 |
Parent |
该对象的直接容器 |
THIS |
该对象 |
THISFORM |
包含该对象的表单 |
THISFORMSET |
包含该对象的表单集 |