VisualFoxPro表单第101112章学案doc.docx

上传人:b****5 文档编号:5743609 上传时间:2022-12-31 格式:DOCX 页数:74 大小:845.33KB
下载 相关 举报
VisualFoxPro表单第101112章学案doc.docx_第1页
第1页 / 共74页
VisualFoxPro表单第101112章学案doc.docx_第2页
第2页 / 共74页
VisualFoxPro表单第101112章学案doc.docx_第3页
第3页 / 共74页
VisualFoxPro表单第101112章学案doc.docx_第4页
第4页 / 共74页
VisualFoxPro表单第101112章学案doc.docx_第5页
第5页 / 共74页
点击查看更多>>
下载资源
资源描述

VisualFoxPro表单第101112章学案doc.docx

《VisualFoxPro表单第101112章学案doc.docx》由会员分享,可在线阅读,更多相关《VisualFoxPro表单第101112章学案doc.docx(74页珍藏版)》请在冰豆网上搜索。

VisualFoxPro表单第101112章学案doc.docx

VisualFoxPro表单第101112章学案doc

10.1面向对象程序设计技术OOP

VisualFoxPro不但仍然支持标准的过程化程序设计,而且在语言上还进行了扩展,提供了面向对象程序设计的强大功能和更大的灵活性。

面向对象的程序设计方法与编程技术不同于标准的过程化程序设计。

程序设计人员在进行面向对象的程序设计时,不再是单纯地从代码的第一行一直编到最后一行,而是考虑如何创建对象,利用对象来简化程序设计,提供代码的可重用性。

对象可以是应用程序的一个自包含组件,一方面具有私有的功能,供自己使用;另一方面又提供公用的功能,供其他用户使用。

传统的编程方法采用面向过程、按顺序进行的机制,设计人员始终要关心什么时候发生什么事情,程序必须有一个完整的开始、中间和结束过程。

面向对象的程序设计方法采用由用户或系统触发事件来驱动程序的机制,设计人员不必考虑程序执行的精确顺序,只需编写响应用户动作的程序。

VFP采用的就是一种可视化的面向对象的编程技术

面向对象的程序设计方法与过程化程序设计相比,有如下明显的优点:

1代码的可重用性

2程序一致性的维护

3可扩充性

10.2在VisualFoxPro中,表单及控件是应用程序中的对象。

用户通过对象的属性、事件和方法程序来处理对象。

VisualFoxPro面向对象的语言扩展部分为应用程序中的对象提供了更多的控件,同时也使得创建和维护可重用代码库更为容易。

它有如下优点:

∙更紧凑的代码。

∙在应用程序中可更容易地加入代码,使您不必精心确定方案的每个细节。

∙减少了不同文件代码集成为应用程序的复杂程度。

面向对象程序设计基本上是一种包装代码,代码可以重用而且维护起来很容易。

其中最主要的包装概念被称为类。

对象是将数据和对该数据的所有必要操作的代码封装起来的程序模块。

对象是组成程序的基本元件,是一个独立存在的实体,具有属性,方法以及可触发的事件程序。

在面向对象的程序中,对象是组成软件的基本元件,是类的一个实例,包括了数据和过程。

例如,在一个运行表单上的控件就是一个对象。

类是一组具有公共方法和一般特性的对象的描述,是一类对象的集合,对象是类的一个实例,是个体。

定义了对象特征以及对象外观和行为的模板。

类和对象关系密切,但并不相同。

类包含了有关对象的特征和行为信息,它是对象的蓝图和框架。

例如,电话的电路结构和设计布局可以是一个类,而这个类的实例--对象,便是一部电话。

类决定了对象的特征,对象具有属性

每个对象都有属性。

例如,一部电话有一定的颜色和大小。

当把一部电话放在办公室中,它又有了一定的位置,而它的听筒也有拿起和挂上两种状态。

在VisualFoxPro中,创建的对象也具有属性,这些属性由对象所基于的类决定。

属性值既能在设计时刻也可在运行时刻进行设置。

10.3类具有继承性、封装性、多态性

1.类的概念类(class)是客观对象的归纳和抽象,是具有共同属性和行为的对象的集合。

基于类可以生成这类对象中的任何一个具体对象,这些对象具有相同的属性。

2.类的特性

(1)封装性(Encapsulation)是指将对象的方法和属性代码包装在一起,以隐藏不必要的复杂性。

(2)继承性(Inheritance)表明子类延用其父类特征的能力,通过继承关系可以利用已有的类构造新类。

继承性提供了通过基类(或父类)产生新的派生类(或子类)的方法。

子类不但具有父类的全部属性和方法,而且还允许对已有的属性和方法进行修改,或添加新的属性和方法。

所有对象的属性、事件和方法程序在定义类时被指定。

此外,类还有如下特征,这些特征对提高代码的可重用性和易维护性很有用处。

∙封装

∙子类

∙继承性

一个子类可以拥有其父类的全部功能,在此基础上,可添加其他控件或功能。

例如,现有一个表示基本电话的类,用户可以定义其子类,该子类可拥有这个基本电话类的全部功能,用户还可添加上自己需要的其他功能。

1继承性一种类可以派生届出一个新类,这种由父类派生而来的类称为子类。

继承性的概念是使在一个类上所做的改动反映到它的所有子类当中。

这种自动更新节省了用户的时间和精力。

例如,电话制造商想以按键电话代替以前的拨号电话。

若只改变主设计框架,并且基于此框架生产出的电话机能自动继承这种新特点,而不是逐部电话去改造,会节省大量的时间。

继承性减少了维护代码的难度。

继承性只体现在软件中,而不可能在硬件中实现。

若发现类中有一个小错误,用户不必逐一修改子类的代码,只需要在类中改动一处,然后这个变动将体现在全部子类中。

2封装

当您在办公室内安装一部电话的时候,您也许并不关心这部电话在内部如何接收呼叫,怎样启动或终止与交换台的连接,以及如何将拨号转换为电子信号。

您所要知道的全部信息就是您可以拿起听筒,拨打合适的电话号码,然后与您要找的人讲话。

在这里,如何建立连接的复杂性被隐藏起来。

所谓抽象性便是指能够忽略对象的内部细节,使用户集中精力来使用对象的特性。

内部的复杂性可以被隐藏起来。

封装使抽象性成为可能。

封装就是指将对象的方法程序和属性代码包装在一起。

例如您可以把确定列表框选项的属性和选择某选项时所执行的代码封装在一个控件里,然后把该控件加到表单中。

∙3子类

一个子类可以拥有其父类的全部功能,在此基础上,可添加其他控件或功能。

例如,现有一个表示基本电话的类,用户可以定义其子类,该子类可拥有这个基本电话类的全部功能,用户还可添加上自己需要的其他功能。

子类继承父类的特性,且拥有新的功能和特性。

以其他类定义为起点,对某一对象所建立的新类。

新类将继承任何对父类所做的修改。

10.4vf6的面向对象技术

所有的属性、事件和方法都由类进行定义。

表单集、表单及各类控件都是VF6的基类对象。

VisualFoxPro的类有两大主要类型,因此VisualFoxPro对象也分为两大类型,它们便是容器类和控件类。

1.基类基类是VFP系统自带的,用户可以从基类中生成所需要的对象,也可以扩展基类创建自己的类。

2.容器类与控件类基类主要有容器类和控件类两大类型,相应地,可分别生成容器对象和控件对象。

(1)容器对象由容器类派生的、可以包含其它对象的对象。

无论在设计时刻还是在运行时刻,容器类对象和它所包含的对象都被当作一个独立的对象进行操作。

在对象的层次中,容器中被包含的对象处于容器对象的下一层。

(2)控件对象由控件类派生的、以图形化方式显示出来并能与用户进行交互的对象。

这些对象是一个相对独立的整体,不能容纳其它对象。

控件对象通常被放置在一个容器对象里。

容器类和控件类

容器类可以包含其他对象,并且允许访问这些对象。

例如,若创建一个含有两个列表框和两个命令按钮的容器类,而后将该类的一个对象加入表单中,那么无论在设计时刻还是在运行时刻,都可以对其中任何一个对象进行操作。

不仅可以轻松地改变列表框的位置和命令按钮的标题,也可以在设计阶段给控件添加对象。

例如,可以给列表框加标签,来标明该列表框。

下表列出了每种容器类所能包含的对象。

容器

能包含的对象

命令按钮组

命令按钮

容器

任意控件

控件

任意控件

自定义

任意控件、页框、容器和自定义对象

表单集

表单、工具栏

表单

页框、任意控件、容器或自定义对象

表格列

表头和除表单集、表单、工具栏、计时器和其他列以外的其余任一对象。

表格

表格列

选项按钮组

选项按钮

页框

页面

页面

任意控件、容器和自定义对象

项目

文件、服务程序

工具栏

任意控件、页框和容器

控件类

控件类的封装比容器类更为严密,但也因此丧失了一些灵活性。

控件类没有AddObject方法程序。

VisualFoxPro的基类

可以在“类设计器”中创建VisualFoxPro大部分基类的子类:

VisualFoxPro的基类

类分为容器类和控件类。

容器类可容纳其它对象如表单、命令按钮组等,控件类不能容纳其它对象,如标签、命令按钮、文本框等。

1控件类

Label标签CommandButton命令按钮ListBox列表框TextBox文本框

Timer计时器

2容器类

Form表单CommandGroupFormSet

●这些类是父容器的集成部分,在“类设计器”中不能子类化。

10.5面向对象程序设计

1.对象的概念对象是反映客观事物属性及行为特征的可操作实体,其中属性描述对象的状态,方法描述对象的行为。

2.对象的基本特征

①属性(Property)对象具有的物理性质及其特性的描述。

②事件(Event)一种系统预先定义好的、能够被对象识别的特定动作,由用户或系统激活。

如,Click事件、Load事件等。

事件是固定的,由系统提供,用户不能创建。

事件过程是设计人员为处理或响应特定事件而编写的程序,由事件的激发而调用其代码,也可在运行中由程序调用其代码。

③方法(Method)是与对象相关联的过程,用于完成某种特定的功能。

方法的代码只能在运行中由程序调用。

方法可以由系统提供,也可以由用户创建。

1.属性描述对象的状态或某一方面的行为特征,派生出来的新类将继承基类和父类的全部属性。

对象的每个属性都具有一定的含义,通过设置对象的属性可以定义对象的不同特征和状态。

2.事件是由VFP预先定义好的、能够被对象识别的动作。

事件作用于对象,对象识别事件并作出相应反应。

在容器对象的嵌套层次中,每个对象独立地接收并处理属于自己的事件。

3.方法是对象在事件触发时的行为和动作,是与对象或对象事件相对应的、相关联的过程,方法被“封装”在对象中,不同的对象具有不同的内部方法。

formset(表单集)

一种容器类。

是一个或多个相关表单的集合。

可使用“表单设计器”在表单集中布置表单。

form(表单)

一种容器类。

是一个或多个页面的集合,类似标准窗口或对话框。

表单可以包含用以显示并编辑数据的控件。

表单可以包含在一个表单集中。

control(控件)

放在一个表单上用以显示数据、执行操作或使表单更易阅读的一种图形对象,如文本框、矩形或命令按钮等。

VisualFoxPro控件包括复选框、编辑框、标签、线条、图象、形状等等。

可以使用“表单设计器”的“表单控件”工具栏在表单上绘制控件。

10.5.1对象引用

在容器层次中引用对象时(例如表单集中,在表单上命令按钮的Click事件里),可以通过快捷方式指明所要处理的对象。

下表列出了一些属性和关键字,这些属性和关键字允许更方便地从对象层次中引用对象:

属性或关键字

引用

Parent

该对象的直接容器。

THIS

该对象。

THISFORM

包含该对象的表单。

THISFORMSET

包含该对象的表单集。

在容器类对象中可以包含其它对象,由此构成了对象之间互相包含的层次关系。

在VFP中,对象是通过容器的层次关系来引用的。

因此,当引用一个对象时,必须知道它相对于容器层次的关系。

(1)绝对引用通过提供对象的完整容器层次来引用对象,是从最外层容器指向目标对象。

例如,

Form1.PageFrame1.Page1.cmdClear.Caption=”清除”

(2)相对引用从参照对象指向目标对象。

例如,

ThisForm.cmdExit.Caption=”退出”

注释您只能在方法程序或事件代码中使用THIS、THISFORM和THISFORMSET。

绝对引用

表单集.表单.控件.属性=值

相对引用

This.parent.backcolor=rgb(192,0,0)

This.caption=”开始”

下表提供了使用THISFORMSET、THISFORM、THIS和Parent来设置对象属性的示例:

命令

包含命令的地方

THISFORMSET.frm1.cmd1.Caption="OK"

在此表单集的任意表单的任意控件其事件或方法程序代码中。

THISFORM.cmd1.Caption="OK"

在cmd1所在的同一表单的任意控件其事件或方法程序代码中。

THIS.Caption="OK"

在需要改变其标题的控件的事件或方法程序代码中。

THIS.Parent.BackColor=RGB(192,0,0)

在表单的一个控件的事件或方法程序代码中,此例的命令设置表单的背景色为暗红色。

10.5.2设置属性

既可以在运行时刻、也可以在设计时刻进行属性设置。

1.属性设置可以在设计时刻、也可以在运行时刻设置属性;设置时既可以利用“属性”窗口,也可以在程序代码中使用命令语句。

格式1:

<父对象>.<对象>.<属性>=<属性值>

格式2:

WITH<父对象>.<对象>

[<.语句序列>]

ENDWITH

例如,设置表单MyForm1中的按钮控件cmdClear的Height(高度)和Width

(宽度)属性:

若要设置属性

∙请使用以下语法:

parent.Object.Property=Value

容器.对象.属性=值

例如,下列语句设置thisform表单中txtDate文本框的各种属性:

thisform.txtDate.Value=DATE()&&显示当前日期

thisform.txtDate.Enabled=.T.&&控件有效

thisform.txtDate.ForeColor=RGB(0,0,0)&&黑色文本

thisform.txtDate.BackColor=RGB(192,192,192)&&灰色背景

在上例的属性设置中thisform是最高层的容器对象。

如果thisform包含在一个表单集中,则需要在父路径上包含这个表单集:

表单集.thisform.txtDate.Value=DATE()

设置多个属性

WITH...ENDWITH结构简化了设置多个属性的过程。

例如,在表单集的表单中,要设置表格列的多个属性,可以使用以下的语法结构:

WITHTHISFORM.text1

.Width=5

.ForeColor=RGB(0,0,0)

.BackColor=RGB(255,255,255)

ENDWITH

10.5.3调用方法程序

对象能够执行的一个操作称作方法。

如果对象已创建,便可以在应用程序的任何一个地方调用这个对象的方法程序。

2.对象方法的调用当对象创建以后,就可以在应用程序的任何一个地方调用这个对象的方法:

格式:

<父对象>.<对象>.<方法>[(参数表)]

例如,调用显示一个表单对象MyForm1的方法:

MyForm1.SHOW

3.调用基类中的方法对象和子类会自动继承基类的全部功能,也可以用新功能替代继承来的功能。

如果希望向新类或对象中添加新功能的同时保留父类功能,可以使用作用域操作符(:

:

)在子类或对象中调用基类中的方法。

例如,MyCommandButton:

:

Click表示MyCommandButton对象继承其父

类的Click事件过程。

若要调用方法程序

∙请使用以下语法:

Parent.Object.Method

下列语句调用方法程序来显示表单,并将焦点设置在文本框上:

thisFormSet.thisForm.Show

thisFormSet.thisForm.Text1.SetFocus

thisForm.release

在表达式中,有返回值的方法程序必须以圆括号结尾。

例如,下列语句将用户自定义的GetNewCaption方法程序的返回值设置成表单的标题:

Form1.Caption=Form1.GetNewCaption()

注释传递给方法程序的参数必须放在方法程序名后面的圆括号中。

例如,Form1.Show(nStyle)。

将nStyle传递给Form1的Show方法程序代码。

10.5.4响应事件

事件是由对象识别的一个动作,进行程序设计时可以编写相应代码对此动作进行响应。

当事件发生时,该事件的过程代码将被执行。

例如,当用户单击命令按钮时,命令按钮的Click事件过程代码将被执行。

用编程方式,可以使用MOUSE命令产生Click、DblClick、MouseMove和DragDrop事件,或者使用ERROR命令产生Error事件,或者使用KEYBOARD命令产生KeyPress事件。

除此以外,用户不能用其他的程序设计方法产生其他事件,但可以调用与这些事件相关的过程。

例如,下面的语句使得thisform的Activate事件代码被执行,但并不激活这个表单:

thisform.Activate

若要激活表单,请使用表单的Show方法程序。

调用Show方法程序将显示并激活表单,同时Activate事件代码也将被执行:

thisform.Show

从内存中释放对象和引用

若一个对象的引用存在,则释放该对象并不能从内存中完全清除它。

例如,下面的命令释放原始对象thisform:

RELEASEthisform

然而,因为存在对frmInvoice中所包含的对象txtCompany的引用,这个对象并不能从内存中释放,要等到使用如下命令释放了txtCustName以后才可全部释放:

RELEASEtxtCustName

 

所有VisualFoxPro基类有如下的最小事件集。

事件

说明

Init

当对象创建时激活。

Destroy

当对象从内存中释放时激活。

Error

当类中的事件或方法程序过程中发生错误时激活。

所有VisualFoxPro基类有如下的最小属性集。

属性

说明

Class

该类属于何种类型。

BaseClass

该类由何种基类派生而来,例如Form、Commandbutton或Custom等

ClassLibrary

该类从属于哪种类库。

ParentClass

对象所基于的类。

若该类直接由VisualFoxPro基类派生而来,则ParentClass属性值与BaseClass属性值相同。

为事件指定代码

事件发生时,若没有与之相关联的代码,则不会发生任何操作。

对于绝大多数事件,您都不必编写代码,您只需对少数几个关键的事件编程即可。

若要编写响应事件的代码,请使用“表单设计器”中的“属性”窗口。

一段代码应置于何处,是由事件发生的顺序决定的。

请注意以下提示:

∙表单中所有控件的Init事件将在表单的Init事件之前执行,所以在表单显示以前,就可在表单的Init事件代码中处理表单上的任意一个控件。

当系统响应用户的一些动作时,自动触发事件代码。

例如,用户在控件上做出单击动作时,系统自动执行为Click事件编写的代码。

事件代码也可被系统事件触发,例如计时器中的Timer事件。

核心事件

下面是VisualFoxPro核心事件集的列表,这些事件适用于大多数的控件。

核心事件集

事件

事件被激发后的动作

Init

创建对象。

Destroy

从内存中释放对象。

Click

用户使用主鼠标按钮单击对象。

DblClick

用户使用主鼠标按钮双击对象。

RightClick

用户使用辅鼠标按钮单击对象。

GotFocus

对象接收焦点,由用户动作引起,如按Tab键或单击,或者在代码中使用SetFocus方法程序。

LostFocus

对象失去焦点,由用户动作引起,如按Tab键或单击,或者在代码中使用SetFocus方法程序使焦点移到新的对象上。

KeyPress

用户按下或释放键。

MouseDown

当鼠标指针停在一个对象上时,用户按下鼠标按钮。

MouseMove

用户在对象上移动鼠标。

MouseUp

当鼠标指针停在一个对象上时,用户释放鼠标按钮。

对象具有与之相关联的事件和方法程序

每个对象都可以对一个被称为事件的动作进行识别和响应。

事件是一种预先定义好的特定动作,由用户或系统激活。

在多种情况下,事件是通过用户的交互操作产生的。

例如,对一部电话来说,当用户提起听筒时,便激发了一个事件,同样,当用户拨号打电话时也激发了若干事件。

在VisualFoxPro中,可以激发事件的用户动作包括:

单击鼠标、移动鼠标和按键。

方法程序是与对象相关联的过程,但又不同于一般的VisualFoxPro过程。

方法程序紧密地和对象连接在一起,并且与一般VisualFoxPro过程的调用方式也有所不同。

事件可以具有与之相关联的方法程序。

例如,为Click事件编写的方法程序代码将在Click事件出现时被执行。

方法程序也可以独立于事件而单独存在,此类方法程序必须在代码中被显式地调用。

事件集合虽然范围很广,但却是固定的。

用户不能创建新的事件,然而方法程序集合却可以无限扩展。

下表列出了与复选框相关联的一些事件。

事件

说明

Click

用户单击复选框。

GotFocus

用户选择复选框。

LostFocus

用户选择其他控件。

下表列出了与复选框相关联的一些方法程序。

方法程序

说明

Refresh

复选框中的值被更新,以反映隐含数据源的数据变化。

SetFocus

焦点被置于复选框,好象用户刚使用TAB键选中复选框。

1、对象的引用格式:

表单.控件.属性=值

thisform.label1.caption="welcometouse!

"

thisform.caption="欢迎光临"

mand1.caption="欢迎光临"

thisform.backcolor=rgb(128,151,26)

thisform.label1.autosize=.T.

thisform.label1.fontsize=12

thisform.label1.fontname="宋体"

thisform.label1.forecolor=rgb(255,22,99)

2、设置属性;属性=值

Caption=“welcometouse”

fontsize=12

autosize=.T.

forecolor=rgb(255,22,99)

3、方法调用格式;表单.控件.方法

对象能够执行的一个操作功能称为方法。

mand1.setfocus设置焦点

thisform.release关闭表单

thisform.refresh刷新表单

调用方法程序

如果对象已创建,便可以在应用程序的任何一个地方调用这个对象的方法程序。

若要调用方法程序

∙请使用以下语法:

Parent.Object.Method

下列语句调用方法程序来显示表单,并将焦点设置在文本框上:

frsFormSet.frmForm1.Show

frsFormSet.frmForm1.txtGetText1.SetFocus

4事件响应

事件是对象识别的一个动作。

响应事件

当事件发生时,该事件的过程代码将被执行。

例如,当用户单击命令按钮时,命令按钮的Click事件过程代码将被执行。

用编程方式,可以使用MOUSE命令产生

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1