您的位置: 网站首页 > 程序开发 > Visaul FoxPro程序设计 > 第7章 面向对象程序设计 > 【7.2 对象的属性、事件和方法】

7.2 对象的属性、事件和方法

 

7.2  对象的属性、事件和方法

对象在现实生活中是很常见的,例如,一个人是一个对象,一台PC机也是一个对象。如果将一台PC机拆开来看,便有“显示器、机箱、软盘驱动器、硬盘、键盘、鼠标器……”,每一个又都是一个对象,即PC机对象是由多个“子”对象组成的。此时,PC机又称为一个容器(Container)对象。在可视化编程中,对象是应用程序的基本元素。

从可视化编程的角度来看,对象是一个具有属性(数据)和方法(行为方式)的实体。一个对象建立以后,其操作就通过与该对象有关的属性、事件和方法来描述。

7.2.1 对象的属性

属性(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

7.2.2 对象的事件 

1.事件的概念

事件(Event)是由Visual FoxPro预先定义好的、能够被对象识别的动作,如单击(C1ick)事件、双击(DblClick)事件、装入(Load)事件、移动鼠标(MouseMove)事件等,不同的对象能识别的事件不尽相同。对象的事件是固定的,用户不能建立新的事件。为此,Visual FoxPro提供了丰富的内部事件,这些事件足以应付Windows中的绝大部分操作需要。

2.事件过程

事件过程(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

以交互方式改变对象的值

 

3.事件触发的顺序

Visual FoxPro中,一个动作可能触发一个对象的多个事件或多个对象的多个事件,每个事件的发生是有其先后次序的。表7-2中列出了一个动作可能触发的事件及先后顺序关系。

7-2  动作触发的事件及其触发顺序

   

发生的事件及先后顺序

单击对象

WhenGotFocusMouseDownMouseUpClick

双击对象

WhenGotFocusMouseDownMouseUpClickDbClick

单击表单

表单的ActivateMouseDown,表单中第一个对象的When

GotFocus,表单的MouseUpClick

单击列表框

MouseDownMouseUpinteractiveChangeClick

单击表格控件中的另外的单元格

BeforeRowColChangeMouseDown,MouseUp

AfterRowColChangeClick

Visual FoxPro中,要查看事件的触发顺序,可单击菜单“工具”“调试器”命令打开如图7-1所示的“调试器”窗口,然后在该窗口中单击菜单“工具”“事件跟踪”命令打开“事件跟踪”对话框,并勾选“开启事件跟踪”复选框,如图7-2所示。

      

7-1  “调试器”窗口                     7-2  “事件跟踪”对话框

4.事件循环

Visual FoxPro中的应用程序必须要创建一个事件循环,事件循环由READ EVENTS命令建立,CLEAR EVENTS命令则停止事件处理。在应用程序中必须保证CLEAR EVENTS命令能够被调用到,否则程序将进入死循环。

7.2.3  对象的方法

方法(Method)是与对象相关联的过程,但又不同于一般的Visual FoxPro过程。方法程序紧密地和对象连接在一起,并且与一般Visual FoxPro过程的调用方式也有所不同。

与事件过程类似,Visual FoxPro的方法属于对象的内部函数,只是方法用于完成某种特定的功能而不一定响应某一事件,如添加对象(Addobject方法、绘制矩形(Box)方法、释放表单(Release)方法等。方法也被“封装”在对象中,不同的对象具有不同的内部方法。在Visual FoxPro中提供了上百个内部方法供不同的对象调用。

与事件过程不同的是,根据需要可由用户自行建立新方法。

调用方法的格式为:引用对象.方法程序。

7.2.4 事件与方法的程序调用

事件过程由事件的激发而调用其代码,也可以在运行中由程序调用其代码,而方法的代码只能在运行中由程序调用。只有当事件发生后,对应的事件代码才会被执行。

在程序中调用事件代码的格式是:

表单名.对象名.事件名

在程序中调用对象方法的格式是:

[[<变量名>]]表单名.对象名.方法名

例如,隐藏和显示表单对象的方法,代码如下:

myForm.HIDE()           &&隐藏表单

myForm.SHOW()           &&显示表单

7.2.5 对象的引用

作为应用程序的用户界面,表单上可以包含许多对象,而这些对象又有可能具有互相包含的层次关系。若要引用一个对象,需要知道它相对于容器层次的关系。例如,如果要在表单集中处理一个表单的控件,则需要引用表单集、表单和控件。

1.绝对引用

它是通过提供对象的完整容器层次来引用对象,若要使表单中的控件无效,需要提供以下地址:

Formset.Form.PageFrame.Page.Grid.Column.Control.Enabled=.F.

2.相对引用

是指在容器层次中引用对象时,可以通过快捷方式指明所要处理的对象。例如,

1THISFORMSET.Frml.Cmdl.Caption"关闭":表示将本表单集Frml表单中Cmdl对象的标题(Caption)属性设置为“关闭”。

2THISFORM.Cmdl.Caption"关闭":表示将本表单的Cmdl对象的标题(Caption)属性设置为“关闭”。

3THIS.Caption"关闭":对于需要改变标题的控件,表示将本对象的标题(Caption)属性设置为“关闭”。

4THIS.Parent.BackColorRGB(192,0g0):将本对象的父对象背景色设置为暗红色。

7-3给出了引用对象的属性和关键字。

7-3  引用对象的属性和关键字

属性和关键字

   

ActiveControl  

当前活动表单中具有焦点的控件

ActiveForm

当前活动表单

ActivePage 

当前活动表单中的活动页

Parent

该对象的直接容器

THIS

该对象

THISFORM  

包含该对象的表单

THISFORMSET

包含该对象的表单集