1、Page 1,第6章 可视化程序设计基础,6.1 面向对象程序设计基础 6.2 创建表单利用表单向导 6.3 表单设计器 6.4 小结,Page 2,6.1.1 基本概念和术语 6.1.2 面向对象程序设计特点 6.1.3 Visual FoxPro基类简介 6.1.4 对象的引用 6.1.5 对象的属性、方法和事件,6.1 面向对象程序设计基础,Page 3,6.1.1 基本概念和术语,类对象属性方法事件事件驱动工作方式,Page 4,6.1.1 基本概念和术语,类(Class)类是一个抽象的概念,它是对一类具有相同属性和方法的对象的性质描述。 对象(Object)对象是类的一个实例,每个对
2、象都有自己固有的特征和行为,特征由相应的属性集描述,行为由相应的方法集和事件集组成。,Page 5,6.1.1 基本概念和术语,属性(Attribute)属性标识了对象的物理性质,决定了对象的特征和状态。 方法(Method)方法是描述对象行为的过程,是为对象完成特定功能而编写的代码。代码是由系统定义。,Page 6,6.1.1 基本概念和术语,事件(Event)事件是系统预先定义的动作,而由用户(如鼠标单击、鼠标拖动等)或系统(如计时器)激活。当事件发生时,对象就会执行相应的事件代码,事件代码由用户编写。 事件驱动工作方式当用户进行一些动作时,系统能自动执行事件代码。,Page 7,6.1.
3、2 面向对象程序设计的特点,封装性(Encapsulation) 将数据(属性)和处理数据方法(行为)的代码组合在一个类的定义中。类中属性和方法的细节对外是不可见的。,Page 8,6.1.2 面向对象程序设计的特点,继承性(Inheritance) 利用现有类通过继承创建新类。新类继承了现有类的属性和方法。一个子类应包含:1)继承父类的全部属性和方法2)子类自己定义的属性和方法,Page 9,6.1.2 面向对象程序设计的特点,多态性(Polymorphism)指不同的对象接收同样的消息时,会导致不同的行为。,Page 10,6.1.3 Visual FoxPro基类简介,VFP基类分为容器
4、类和控件类 容器类对象可以包容其他对象,并且也允许访问所包容的对象,容器类提供了一种将多个对象进行组合的功能。 控件类比容器类封装得更完整,控件类对象只能被包容在容器类对象之中。,Page 11,6.1.3 Visual FoxPro基类简介,容器类介绍 表一,Page 12,6.1.3 Visual FoxPro基类简介,容器类介绍 表二,Page 13,6.1.3 Visual FoxPro基类简介,控件类介绍 表一,Page 14,6.1.3 Visual FoxPro基类简介,控件类介绍 表二,Page 15,6.1.3 Visual FoxPro基类简介,Visual FoxPro类
5、最小属性集,Page 16,6.1.3 Visual FoxPro基类简介,Visual FoxPro基类最小事件集,Page 17,6.1.4 对象的引用,对象是面向对象的程序设计中的最小单元,应用程序由若干个对象组成。用户在编程中使用对象的属性、调用对象的方法或调用对象的事件都需要引用对象。 引用对象就是描述对象的归属层次。对象的层次关系是包容与被包容的关系,只有容器类的对象才可以包容其他对象 。,Page 18,包容关系的示例,6.1.4 对象的引用,Page 19,6.1.4 对象的引用,层次结构,Page 20,6.1.4 对象的引用,引用对象时必须指明该对象在嵌套层次关系中的位置。
6、 对象的引用格式中用“.”分隔对象、属性和方法。,常用的对象引用名,Page 21,6.1.4 对象的引用,对象的引用有相对引用和绝对引用两种 (1)相对引用:从对象的当前层次开始逐级引用。其引用关键字由This开头。例如,若当前对象是表单(Form1)This.caption 表示引用当前对象(表单)的标题属性。又如,若当前对象是表格(Grid1)This.Parent.Command1.caption 表示引用与当前对象(表格)同一容器中命令按钮对象的标题属性。,Page 22,6.1.4 对象的引用,(2)绝对引用:从当前表单集或表单对象开始,逐级引用直到引用的对象。其引用关键字由Thi
7、sformset或Thisform开头。 例如:ThisFormSet.Form1.Text1.Value 表示从表单集开始,引用文本框的Value属性ThisForm.Command1.Click 表示从当前表单开始,引用命令按钮的Click事件,Page 23,6.1.5 对象的属性、方法和事件,对象的属性:是对象的数据,用来描述对象的特征和状态。不同类对象具有不同的属性集,并且同类对象中各个对象的属性值又可以各不相同。,Page 24,6.1.5 对象的属性、方法和事件,对象的方法:对象的行为和动作称为方法,一个对象可以具有若干方法,用户虽然不能修改方法中已存在的代码,但用户可以为某个方
8、法添加新的代码,以扩展方法的功能。,Page 25,6.1.5 对象的属性、方法和事件,对象的事件:是预先定义的、由用户或系统触发的、能被对象识别和响应的动作,事件过程是用户为处理特定事件而编写的一段程序代码。,Page 26,6.1.5 对象的属性、方法和事件,常用属性 表一,一、对象的属性,Page 27,6.1.5 对象的属性、方法和事件,常用属性 表二,Page 28,6.1.5 对象的属性、方法和事件,对象属性值的设置 一个对象创建后,其各个属性都有默认的属性值。用户可以通过属性窗口或编程的方式来设置对象的属性值。 设置对象属性值的编程方式:格式一:. = 功能:设置对象的一个属性例
9、如,把表单的标题设置为“OK”ThisForm.Caption = “OK“,Page 29,6.1.5 对象的属性、方法和事件,设置对象属性值的编程方式:格式二:WITH .=.=ENDWITH功能:连续设置对象的多个属性。说明: 不能在交互方式下使用该语句; 并不是所有的对象属性都可以用编程方式来改变其属性值,如Name属性。,Page 30,6.1.5 对象的属性、方法和事件,常用方法列表,二、对象的方法,Page 31,6.1.5 对象的属性、方法和事件,调用对象方法的语句格式:.()例如:ThisForm.Refresh 表示刷新当前表单,Page 32,6.1.5 对象的属性、方法
10、和事件,常用事件列表一,三、对象的事件,Page 33,6.1.5 对象的属性、方法和事件,常用事件列表二,Page 34,6.1.5 对象的属性、方法和事件,事件的激发:可以由系统、用户操作或程序代码激发。当事件发生时,相应的事件过程就会被执行。 显式调用对象事件的命令格式: .事件名() 例如,单击表单对象时会执行表单的Click事件过程,也可以使用下述命令显式调用:ThisForm.Click,Page 35,6.1.5 对象的属性、方法和事件,事件驱动工作方式程序的执行顺序取决于事件发生的前后顺序。因此应在恰当的事件中编写代码。 通常将事件分为五个阶段:装载阶段(Load事件)对象生成
11、阶段(Init事件)交互式操作阶段 对象释放阶段(Destroy事件)卸裁阶段(UnLoad事件),Page 36,6.1.5 对象的属性、方法和事件,装载阶段(Load) 只有表单或表单集才有Load事件。 表单运行时,首先需要把表单集和表单装入内存,即Load事件。 按照先外后内的顺序触发Load事件:先触发表单集的Load事件,再触发表单的触发Load事件。 注意:触发Load事件时,表单集、表单及所包容的所有对象都尚未被创建。该事件中代码通常是定义全局变量和设置环境。,Page 37,6.1.5 对象的属性、方法和事件,对象生成阶段(Init) 紧跟在Load事件之后,触发各对象的In
12、it事件,即创建对象。 对象的Init事件触发顺序是从内到外:容器对象的Init事件触发之前,先触发其所包容的所有对象的Init事件。 在表单的Init事件中可以处理表单所包容的任一对象。,Page 38,6.1.5 对象的属性、方法和事件,交互式操作阶段表单及其所包容的对象全部被创建之后,容器对象的Activate事件首先被触发,接着第一个控件获得焦点,之后通过用户的一系列交互操作来触发事件。,Page 39,6.1.5 对象的属性、方法和事件,对象释放阶段(Destroy) 关闭表单时要先通过Destroy事件释放表单及其所包容的所有对象。 与Init事件触发顺序相反,Destroy事件触
13、发的顺序是从外到内:先触发容器对象的Destroy事件,然后才触发其所包容的对象的Destroy事件。,Page 40,6.1.5 对象的属性、方法和事件,卸裁阶段(UnLoad) 只有表单和表单集才有UnLoad事件。 当表单所包容的所有对象、表单及表单集的Destroy事件触发之后,才触发表单、表单集的的UnLoad事件。,Page 41,6.2 创建表单利用表单向导,表单(Form):建立应用程序的最主要工具之一。表单产生标准的应用程序窗口或对话框,可以包含命令按钮、标签、文本框、列表框、复选框等各种控件。 控件是图形化的对象。 用户可以利用表单向导和表单设计器创建表单。,Page 42
14、,6.2 创建表单利用表单向导,打开表单向导有多种方法: (1)使用项目管理器 (2)选择“文件”菜单中的“新建”命令 (3)常用工具栏上的“新建”命令按钮 (4)选择“工具”菜单中的“向导”菜单命令,Page 43,表单向导以一种交互方式引导用户创建表单 表单向导可建立的两类表单: 单库表表单 课本P155 例6.1创建一个表单,实现对数据表student的维护 双表(一对多)表单 课本P158 例6.2利用student和grade表设计一个一对多表单的运行结果。,6.2 创建表单利用表单向导,Page 44,6.2 创建表单利用表单向导,在表单向导中建立表单的过程: 步骤1 - 字段选取
15、 步骤2 选择表单样式 步骤3 排序次序 步骤4 完成,Page 45,6.3 表单设计器,表单设计器提供了可视化设计表单的界面,6.3.1 表单设计器操作界面 6.3.2 利用表单设计器设计表单 6.3.3 表单的保存、修改和运行 6.3.4 表单的常用属性、方法和事件 6.3.5 表单的数据环境,Page 46,启动表单设计器 (1)在“项目管理器” 中启动:在“项目管理器”中选择“文档”选项卡,选定“表单”,单击“新建”按钮,在 “新建表单” 对话框中单击“新建表单”按钮。 (2)菜单方式调用:选择“文件”菜单中的“新建” (3)单击常用工具栏上的“新建”按钮 (4)命令方式 CREAT
16、E FORM,6.3.1 表单设计器操作界面,Page 47,6.3.1 表单设计器操作界面,表单设计器界面,Page 48,6.3.1 表单设计器操作界面,表单设计器工具栏,Page 49,6.3.1 表单设计器操作界面,表单控件工具栏,Page 50,6.3.1 表单设计器操作界面,表单控件工具栏,Page 51,6.3.1 表单设计器操作界面,表单控件工具栏,Page 52,6.3.1 表单设计器操作界面,表单控件工具栏,Page 53,6.3.1 表单设计器操作界面,表单控件工具栏,Page 54,6.3.1 表单设计器操作界面,调色板工具栏,Page 55,6.3.1 表单设计器操作
17、界面,属性窗口,Page 56,6.3.1 表单设计器操作界面,代码编辑窗口用于编写指定对象的指定事件(或方法)的程序代码。,代码编辑窗口,Page 57,6.3.2 利用表单设计器设计表单,一、表单控件的生成工具之一:表单生成器。它能方便、快捷地在当前表单中生成字段对象。 调用表单生成器的方法有: 选择“表单”菜单中的“快速表单”命令。 单击“表单设计器”工具栏中的“表单生成器”按钮。 右击表单,在快捷菜单中选择“生成器”。,Page 58,6.3.2 利用表单设计器设计表单,表单生成器操作方法:与表单向导类似,从相关表或视图中选取字段,这些字段将以控件的形式被添加到表单中。 利用生成器只能
18、按默认格式生成字段对象,若不能满足设计要求,用户还需在表单设计器中进一步编辑、修改和设计。,Page 59,6.3.2 利用表单设计器设计表单,二、控件的基本操作遵循“先选定,后操作”的原则。 1)选定控件 用鼠标单击对象即可选定单个控件。 若要选定相邻的多个控件,利用鼠标拖动把所选定控件包含在虚框中。 若是选定不相邻的控件,可按下,然后单击指定控件。,Page 60,6.3.2 利用表单设计器设计表单,2)移动控件选定对象之后,通过鼠标拖动对象到指定位置。也可以使用方向键移动控件。3)复制、删除控件可利用“剪贴板” 方便地复制控件。选定要删除的控件,按键或使用“编辑”菜单中的“清除”命令即可
19、删除控件。,Page 61,6.3.2 利用表单设计器设计表单,三、控件的布局调整方法:利用“格式”菜单或“布局”工具栏。,左对齐,Page 62,6.3.2 利用表单设计器设计表单,四、设置Tab键次序设计表单时,系统按照各控件设置的前后次序,自动给每一个控件指定获得焦点的次序,这就是Tab键次序,其值也就是对象属性TabIndex的值。 表单运行时,在对象生成阶段系统依照各控件的Tab键次序依次激活各控件的Init事件。 在对象生成阶段之后即交互操作阶段,按下键盘上的Tab键可以使焦点按Tab键次序在各控件间移动。,Page 63,6.3.2 利用表单设计器设计表单,重新设置各控件的Tab
20、键次序方法:交互式和列表式。用户可以选择“工具”菜单中“选项”,打开“选项” 对话框的“表单”选项卡,选择一种设置的方法。,Page 64,6.3.2 利用表单设计器设计表单,如果采用的是交互式,那么,选择“显示”菜单中的“Tab键次序”,重新设置表单上的各个控件的“Tab键次序” 的界面如下:,Page 65,6.3.2 利用表单设计器设计表单,如果采用的是列表式,那么,选择“显示”菜单中的“Tab键次序”,重新设置表单上的各个控件的“Tab键次序” 的界面如下:,Page 66,6.3.3 表单的保存、修改和运行,保存表单:选择“文件”菜单中的“保存”命令或单击“常用”工具栏中的“保存”按
21、钮,将自动保存成两个文件:扩展名为SCX的表单文件和扩展名为SCT的表单备注文件 表单修改 选择“文件”菜单中的“打开”命令 使用命令方式Modify Form 使用“项目管理器” 运行表单:选择“表单”菜单中的“执行表单”命令或单击常用工具栏上的“运行”按纽。,Page 67,6.3.4 表单的常用属性、方法和事件,表单的外观属性 表一,Page 68,6.3.4 表单的常用属性、方法和事件,表单的外观属性 表二,Page 69,6.3.4 表单的常用属性、方法和事件,表单的标题栏属性,Page 70,6.3.4 表单的常用属性、方法和事件,表单的其它常用属性,Page 71,6.3.4 表
22、单的常用属性、方法和事件,表单常用方法,Page 72,6.3.4 表单的常用属性、方法和事件,表单常用方法说明:1)当用代码改变了表单及其所包容的控件的属性后,需要调用Refresh方法把改变后的属性内容显示出来。2)仅当表单的Closable属性值为.T.时,才可以调用Release方法关闭表单。,Page 73,6.3.4 表单的常用属性、方法和事件,表单常用的事件,Page 74,6.3.4 表单的常用属性、方法和事件,ThisForm.caption=“红色“ Thisform.Backcolor = RGB(255,0,0) Wait “按任意键将显示表单“ Window,例6.4
23、:创建表单实现:运行表单,按任意键显示红色背景的表单;单击表单的“关闭”按钮,表单背景改为绿色;再按任意键关闭表单。,Page 75,再选择“destroy”事件,ThisForm.caption=“绿色“ ThisForm.BackColor=RGB(0,255,0)Wait “按任意键将关闭表单“ Window,6.3.4 表单的常用属性、方法和事件,Page 76,6.3.4 表单的常用属性、方法和事件,Page 77,6.3.4 表单的常用属性、方法和事件,表单运行后返回表单编辑状态,Page 78,6.3.5 表单的数据环境,数据环境简介要设计与数据表有关的表单,必须为表单指定相关的
24、数据源。数据环境包括数据表、视图及其它们之间的关系,当表单运行时,其中的表和视图自动打开,关闭表单时也随之关闭。,Page 79,6.3.5 表单的数据环境,打开数据环境设计器可以利用数据环境设计器来设置表单或表单集的数据环境。选择“显示”菜单中的“数据环境”命令,即打开数据环境设计器 向数据环境添加、移去表或视图,Page 80,6.3.5 表单的数据环境,在数据环境中设置表间的临时关系将父表的某个字段拖动到子表中与之相匹配的索引标记上。如果子表中没有与之相匹配的索引标记,可以将父表中的字段拖动到与之相匹配的某个字段上,然后根据系统提示创建索引,即可设置相应的关系。,Page 81,6.3.
25、5 表单的数据环境,数据绑定的概念若表单中控件与数据源实现数据绑定之后,控件的值与数据源的值保持一致。从而实现控件与数据源之间的数据传递。,控件用于实现数据绑定的属性,Page 82,6.3.5 表单的数据环境,实现数据绑定的快捷方式 :从“数据环境设计器”、“项目管理器”和“数据库设计器”中将字段(表或视图)直接拖入当前表单,表单设计器将自动生成相应的控件,并自动实现相关控件与字段(表或视图)之间的数据绑定。,Page 83,6.3.5 表单的数据环境,各类型字段、表(或视图)与控件之间的对应关系,Page 84,小 结,表单是Visual FoxPro提供的用于建立应用程序的最主要的工具之一。表单向导可用于创建表单,但不能用于修改已经存在的表单。表单设计器是Visual FoxPro面向对象的可视化程序设计的主要工具,以交互的方式向表单设计窗口添加控件,并可以利用“属性”窗口、生成器和程序代码来设置对象的属性。并可以利用程序代码为对象和方法扩展功能;为事件编写完成指定功能的代码。,