第六章对象模型与事件模型结构化程序设计设计方法——自顶向下、功能分解开发过程通常是从“做什么”到“如何做”优点:结构性强、便于设计 和理解面向对象的程序设计基于问题对象的自底向上的功能综合开发过程是从“用什么做”到“要做什么”优点:简化程序设计,提高程 序代码的可重用性更接近现实世界,可降低开发和维护的费用可以和各种模型自然的融合类和对象 —OOP的程序基本单位基本概念类(Class)定义了对象特征以及对象外观和行为的模板,它刻画了一组具有共同特征的对象。类 是对象的抽象,对象是类的实例OOP中,程序是由一个或多个类组成,在程序中视需要创建各个对象(实例)。类是静态概念,对象是动态概 念对象是基于某种类所创建的实例,包括了数据和过程应用程序中的对象表单(Form)、表单集(FormSet)、控件( Control)类(Class)基类(BaseClass):VFP系统提供的内部定义的类。(表单、控件)子类(SubCl ass):引用VFP基类或其他的子类,建立的新类。用户自定义类(User-DefineClass):与基类相似,由用户定义,可 用于派生子类,但无可视化表示形式类的特点继承性(inheritance)多态性(polymorphism)封装性(enc apsulation)抽象性(abstraction)对象(Object)对象是基于某种类所创建的实例。每个对象都具有属性 及与之相关的事件和方法属性(Property)定义对象的特征或某一方面的行为。对象的属性值可在设计阶段或运行阶段修改。事 件(Event)是由对象识别的一个动作。可编写相应的代码,对动作进行响应。事件可由用户的动作、程序代码或系统产生。对象的 事件集合是固定的,用户不能创建新的事件。方法(Method)是对象能够执行的一个操作。方法是与对象相关联的过程,也称方法程 序。方法可由用户自己创建。基类和子类基类:VFP系统提供的内部定义的类。子类:引用VFP基类或其他子类建立的新类。用户自 定义类:与基类相似,由用户子定义,但无可视的表示形式类库(.vcx,.vct):用于存放子类的库文件。基类和子类VFP的类 基类、子类、用户自定义类VFP的基类(参见p122)基类的最小事件集和最小属性集类库(.vcx,.vct):用于存放子类 的库文件容器类(Containerclasses)是包容其他类的基类容器可以包含其它对象;容器可以作为所包含的对象的父对 象;允许访问包含的对象;控件类(Controlclasses)是可以包含在容器类中并有用户派生的基类。控件对象可以包含在 容器中不能作为其它对象的父对象基于类的不同类型,VFP的对象可分为容器对象和控件对象对象的引用何时要引用对象当要设置或 取得对象的某个属性的值时;当要执行对象的某个方法事件时;容器层次体系容器与容器中的控件是上下层次的关系;一个应用程序的最高 层次是_screen或_VFP,最低层次是一个非容器类控件或是一个不包含任何控件的容器类控件;层次体系示意图根据对象的层次体 系引用对象绝对引用(全名引用):从表单或表单集开始,把层次体系中的对象名由大到小用圆点隔开,直到要引用的控制的某个属性。相对引 用在控制内对自身引用:This自身所在容器(父对象)的引用:Parent控制所在的表单的引用:Thisform控制所在 的表单集的引用:Thisformset活动的表单的引用:Activeform活动的控制的引用:Activecontrol 设置对象属性1、每个对象都有属性,可对对象设置属性属性可以在设计时设置也可在运行时设置,但也有一些属性是只读的。设计时修改 属性在“属性”窗口中进行程序代码中,用以下语法进行设置引用对象.属性=值FormSet1.Form1.Text1.V alue=DATE()FormSet1.Form1.Text1.ForeColor=RGB(0,0,0)FormSet1.Fo rm1.Text1.BackColor=RGB(192,192,192)FormSet1.Form1.Text1.FontNam e=“黑体”2、引用一个对象的多个属性和方法如:withformset1.form1.text1 .Value=DATE().ForeColor=RGB(0,0,0).BackCol or=RGB(192,192,192).FontName=“黑体”endwith3、引用容器中的多个对象如:Wit hThisform .txtXh.backcolor=rgb(128,0,0) .txtXm.backcolor=r gb(0,128,0) Endwith调用对象的方法程序方法程序是对象能够执行的一个操作,是和对象相联系的过程。调用语法 :<引用对象>.<方法程序>FormSet1.Form1.showFormSet1.Form1.SetFocus有返回值的 方法程序以圆括号结尾可以为对象的方法和事件编写代码,还可在自建的子类中扩展方法集。响应事件事件是对对象识别的一个动作,可以编 写相应的代码对此动作进行响应。用户不能用其他的程序设计方法产生其事件,但可以调用与这些事件相关的过程。常用的事件类:鼠标事件 键盘事件表单事件控件焦点事件数据环境事件相关事件最小事件集、核心事件(P126-127)容器层次事件和类层次中的事件 容器不处理与所包含的控件相关联的事件本对象有事件代码则执行本对象的代码,若无事件代码,则不执行更高层容器同一事件的代码。例外 :选项按钮组与命令按钮组事件激发的顺序打开“调试器”窗口,“工具”——“事件跟踪”——“开启事件跟踪”(P129)鼠标事 件(一)MouseMove事件当用户在一个对象上移动鼠标时发生PROCEDUREObject.MouseMove[LPA RAMETERSnIndex,nButton,nShift,nXCoord,nYCoord]或LPARAM ETERSnButton,nShift,nXCoord,nYCoordClick事件程序中包含触发此事件的代码,或鼠标 单击控制PROCEDUREObject.Click[LPARAMETERSnIndex]鼠标事件(二) RightClick事件当用户在控制上右击鼠标时发生PROCEDUREControl.RightClick [LP ARAMETERSnIndex]DblClick事件当连续两次点击鼠标左键并释放时发生PROCEDUREObject.D blClick[LPARAMETERSnIndex]鼠标事件(三)MouseDown事件当用户按下一个鼠标 键时发生MouseUp事件当用户释放一个鼠标键时发生DragDrop事件当完成拖放操作时发生。DragOver事件控制 拖过目标对象时发生此事件PROCEDUREObject.DragOverLPARAMETERS[nIndex,]oSou rce,nXCoord,nYCoord,nState鼠标事件(四)DropDown事件组合框中,点击下箭头后,列表即将 被下拉时PROCEDUREComboBox.DropDown[LPARAMETERSnIndex]Scro lled事件表格控制中,单击水平或垂直滚动条PROCEDUREGrid.ScrolledLPARAMETE RS[nIndex],nDirectionDownClick事件——单击控制的下箭头时UpClick事件——单击控制的 上箭头时键盘事件KeyPress事件当用户按下并释放某个键时,发生此事件PROCEDUREObject.KeyPress LPARAMETERS[nIndex,]nKeyCode,nShiftAltCtrl或 LPARAMETERSnKeyCode,nShiftAltCtrl改变控件内容的事件InteractiveChan ge事件在使用鼠标或键盘更改控制的值时发生PROCEDUREControl.InteractiveChange [LPARAMETERSnIndex]ProgrammaticChange事件在程序代码中更改一个控制值时发生PROC EDUREControl.ProgrammaticChange[LPARAMETERSnIndex]焦点事件 (一)焦点(Focus)用以指出当前被操作的对象GotFocus事件用任何方法使对象接受到焦点时发生PROCEDUREO bject.GotFocus[LPARAMETERSnIndex]LostFocus事件当某个对象失去焦点时 发生焦点事件(二)When事件在控制接受焦点之前发生该事件PROCEDUREControl.When[L PARAMETERSnIndex]返回值.T.和.F.,结果不同Valid事件在控制失去焦点之前发生该事件返回值 .T.和.F.,结果不同表单事件(一)Load事件(表单和表单集)创建对象之前发生PROCEDUREContro l.Valid[LPARAMETERSnIndex]UnLoad事件(表单和表单集)在对象被释放时发生Ac tivate(激活)事件当激活表单、表单集或页对象,或者显示工具栏对象时,发生该事件PROCEDUREObject.Acti vate表单事件(二)Activate事件当激活表单、表单集或页对象,或者显示工具栏对象时,发生该事件PROCEDURE Object.ActivateDeactivate事件对容器对象,当所包含的对象没有焦点而不再处于活动状态时,该事件发生Pa int事件当表单或工具栏重画时发生PROCEDUREObject.PaintResize事件——调整对象大小 时发生数据环境事件AfterCloseTables事件在表单、表单集或报表的数据环境中,释放指定的表或视图后将发生该事件P ROCEDUREDataEnvironment.AfterCloseTablesBeforeOpenTables事件与表单集 、表单或报表的数据环境相关联的表和视图打开之前PROCEDUREDataEnvironment.BeforeOpenTable s其它事件(一)Timer事件当经过Interval属性中指定的毫秒数时发生PROCEDURETimer.Timer [LPARAMETERSnIndex]Init事件在创建对象时发生PROCEDUREObject.Init [LPARAMETERSParam1,Param2,...]其它事件(二)Destroy事件在释放一个 对象实例时发生PROCEDUREObject.Destroy[LPARAMETERSnIndex]Erro r事件当某方法运行出错时发生PROCEDUREObject.ErrorLPARAMETERS[nIndex,]nErr or,cMethod,nLine事件驱动和事件循环事件驱动——程序代码的执行总是由某个事件的发生而引发。事件驱动程序设计 是一种强调事件代码的程序设计模型利用VFP进行应用程序设计时,必须创建事件循环(eventloop)事件循环是由READEVENTS命令建立、CLEAREVENTS命令终止的交互的运行环境方法方法(程序)是对象能够执行的一个操作系统提供的方法(见P140),用户可以调用这些方法,也可以为这些方法设计新的程序常见的方法设计出基本的类和对象利用类的继承性更新功能VFP基类派生子类子类子类VFP基类派生子类子类子类表单集表单容器控件FormSet1.Form1FormSet1.Form1.PageFrame1.Page1.Column1.Text1_SCREEN.ActiveForm_SCREEN.ActiveForm.ActiveControl |
|