文档库 最新最全的文档下载
当前位置:文档库 › 第8章 表单设计与控件应用

第8章 表单设计与控件应用

第8章 表单设计与控件应用
第8章 表单设计与控件应用

第8章表单设计与控件应用

8.1 学习指导

8.1.1 基本概念

1.对象

对象是指客观世界里的任何实体,它是面向对象的程序设计的基本单元,对象可以是具体的事物,也可以是指某些概念。

(1)对象的属性

属性用来表示对象的状态,是对象的数据,其属性值既可以在设计时在“属性”窗口设置,也可以在运行时在程序代码中实现。

(2)对象的方法

对象的方法描述对象的行为,是对当前对象接受了某个消息后所采取的一系列操作的描述。方法的代码是不可见的,可以通过调用来使用对象的方法。

(3)对象的事件

对象的时间是每个可以识别和响应的某些操作行为,可以由系统或用户引发。

Visual FoxPro编程的核心就是为每个要处理的事件编写响应事件的程序代码。

事件集是固定的,用户不能定义新的事件。

(4)对象的引用

对象是通过对象名来引用,对象名是由对象的NAME属性指定,对象的引用有绝对引用和相对引用两种方式。

①绝对引用:是从包含该对象的最外面的容器名开始,一层一层地进行。

②相对引用:是从当前位置开始。相对引用中的关键字及意义如下:

Parent:当前对象的直接容器对象。

This:当前操作的对象。

ThisForm:当前对象所在的表单。

ThisFormSet:当前对象所在的表单集。

2.类

(1)类的概念

类是对象外观和行为的模板,它是对一类相似对象的性质描述。

基于某个类生成的对象称为这个类的实例。

(2)基类

基类是系统提供的现成的类,用户不能修改基类,但基于类生成所需要的对象,也可以扩展基类来创建自己的类。

3.子类与继承

子类的在已有类的基础之上进行修改而形成的类。

继承是指基于现有的类创建的新类,新类称为现有类的子类,而现有类则称为新类的父类。

子类继承了父类的方法和属性,这样新类的成员中包含了从其父类继承的成员如属性和方法,也包括了子类自己定义的成员。

4.容器和控件

Visual FoxPro中的类有控件类和容器类两种,它们分别生成容器对象和控件对象。

(1)控件

控件是一个可以以图形化方式显示并能与用户进行交互的对象,如文本框、命令按钮、复选框、页框等。

(2)容器是可以包含其他控件或容器的特殊控件,如表单、页框、表格等。

5.常用控件

(1)标签控件(Label)

标签是用来显示文本的图形控件,被显示的文本称为标题文本。

标题文本最多包含字符数为256个。

可以指定TAB键次序,但标签不能获得焦点,而是把焦点传递给TAB键次序中紧跟其后的下一个控件。

(2)文本框控件(TextBox)

文本框用来在内存变量、数组元素及非备注型字段中输入或编辑数据。

文本框可以使用剪贴板的操作,在文本框内可以编辑任何类型的数据。

(3)编辑框控件(EditBox)

编辑框用来输入及编辑数据。编辑框是一个完整的字处理器,可以有自己的垂直滚动条。编辑框只能输入及编辑字符型数据,包括字符型内存变量、数组元素、字段及备注字段的内容。

(4)命令按钮控件(CommandButton)

命令按钮控件用来启动某个事件代码,完成特定功能。

(5)命令按钮组控件(CommandGroup)

命令组是包含一组命令按钮的容器控件,可以单个或作为一组来操作其中的按钮。

(6)选项按钮组控件(OptionGroup)

选项组是包含选项按钮的容器,一个选项组中包含多个选项按钮,但只能从中选择一个按钮。

选项组特点:被选中项前面显示一个圆点。选中一项时,其他选项按钮为未选中状态。

(7)复选框控件(CheckBox)

有时希望在应用程序的用户界面上提供一些项目,让用户从几种方案中选择其中一种或多种,Visual FoxPro提供一种称为“复选框”的控件,它有两种状态可以选择:

①选中,复选框中出现一个“√”标志。

②不选,或称“关闭”,“√”标志显示,如同开关一样。

每单击一次,它的状态在“打开”与“关闭”之间切换。“√”标志也在有和无之间切换。

(8)组合框控件(ComboBox)

组合框与列表框相似,用于提供一组条目供用户从中选择。

(9)页框控件(PageFrame)

页框是包含页面(Page)的容器控件。页面也的容器,其中可以包含所需的控件,页框、页面和相应的控件构成选项卡。在默认情况下包含两个页面。

(10)表格控件(Grid)

表格(Grid)控件类似浏览窗口。它具有网格结构,有垂直滚动条和水平滚动条,可以同时操作和显示多行数据。但表格不等于浏览窗口。作为一个控件,表格用于在电子表格样式的表格中显示数据。

表格控件特点:

①一个表格对象由若干个列对象(Column)组成。

②每个列对象包含一个标头对象(Header )和若干个控件。

③表、列、标头和控件都有自己的属性、事件和方法。

表格生成器

表格生成器用来交互式设置表格的有关属性,设计所需的表格。

表格生成器对话框中有四个选项卡。

①表格项:指定要在表格内显示的字段。

②样式:指定表格的样式

③布局:指明各列的标题和控件类型,调整各列列宽。

④关系:设置一个一对多关系,指明父表中关键字段与子表中的相关索引。

8.1.2 基本操作

1.创建表单

(1)使用表单向导

(2)使用表单设计器

(3)调用表单生成器

2.管理表单

(1)保存表单

(2)修改已有的表单

3.表单的常用属性、事件和方法

(1)表单的常用属性

AlwaysOnTop属性:是否总是位于其他窗口之上(默认值为.F.)。

AutoCenter属性:初始化时,是否自动在主窗口内居中显示(默认值为.F.)。

BackColor属性:指明表单窗口的颜色(默认值为255,255,255)。

BorderStyle属性:边框的风格(默认值为3)。

Caption属性:指定标题栏上的文本(默认值为Form1)。

Closable属性:是否可以通过单击“关闭”按钮或双击“关闭”框关闭表单(默认值为.T.)。

ControlBox属性:控制按钮(默认值为.T.)。

MaxButton属性:是否有最大化按钮(默认值为.T.)

MinButton属性:是否有最小化按钮(默认值为.T.)

WindowState属性:指定表单的状态。0:正常,1:最小化,2:最大化(默认值为0)。

(2)表单的常用事件

Load事件:当表单被装入内存时发生。

Init事件:当表单建立时发生。

Activate事件:当表单被激活时发生。

上述事件被激发的顺序为:Load、Init、Activate。

Destroy事件:当表单被释放时发生。

Unload事件:当表单对象释放时发生。

上述事件被激发的顺便为:Destroy、Unload。

Resize事件:当用户或程序改变表单的大小时发生。

(3)表单的常用方法

Hide方法:隐藏表单。

Show:显示表单。

Release:释放表单。

Refresh:刷新表单。

4.控件的操作

选定控件:单击控件。

移动控件:拖动控件到指定位置。

调整控件大小:选行控件后,拖动四周的句柄。

复制控件:通过剪贴板的“复制”和“粘贴”命令。

删除控件:选定控件后按Del键。

布局控件:使用“格式”菜单或“布局”工具栏的按纽,可以对齐控件和调整控件的大小。

设置Tab键次序:控件的Tab键次序决定了控件的次序。

5.数据环境

(1)数据环境的打开

(2)数据环境中常用的操作

向数据环境中添加表和视图:执行“数据环境”菜单的“添加”命令。

从数据环境中移动表和视图:执行“数据环境”菜单的“移去”命令。

在数据环境中设置关系:将主表的某个字段拖到子表相应字段。

在数据环境中编辑关系:单击表示关系的连线选定关系,然后,在“属性”窗口中选择关系属性并设置。

(3)向表单添加字段

Visual FoxPro允许用户从“数据环境”设计器窗口或“数据库设计器”窗口中直接将字段、视图拖入表单,系统将产生相应的控件并与字段相联系。

在默认情况下,拖动不同类型的字段将产生不同的控件:

拖动字符型控件:产生文本框。

拖动备注型控件:产生编辑框。

拖动表或视图:产生表格控件。

8.1.3 相关命令

创建新表单:CREATE FORM [<表单文件名>|?]

打开或修改表单:MODIFY FORM [<表单文件名>|?]

运行表单:DO FORM <表单文件名>

8.2 例题解析

8.2.1 选择题

【例8-1】数据环境泛指定义表单或表单集时使用的,包括表、视图和关系。A)数据B)数据库C)数据源D)数据项

【答案】C

【解析】在Visual FoxPro中,数据环境是一个对象,泛指定义表单或表单集时使用的数据源,包括表、视图和关系。

【例8-2】Init事件由时引发。

A)对象从内存中释放B)事件代码出现错误

C)方法代码出现错误D)对象生成

【答案】D

【解析】选项A错误,因为Destroy事件是由从内存中释放对象时引发。选项B和C错误,因为Error是由事件或方式代码出错时引发。Init事件在对象生成时引发,因此答案为D。

【例8-3】如果一个控件的属性值为.F.,将不能获得焦点。

A)Enabled和ControlSource B)Enabled和Click

C)ControlSource和Click D)Enabled或Visible

【答案】D

【解析】在Visual FoxPro中,对象被选定,它就获得了焦点,焦点的标志可以的文本框内的光标,命令按钮的虚线框等。焦点可以通过单击对象获得,可以按Tab键切换对象获得焦点,也可用代码方式为控件设置焦点。

【例8-4】关于容器,以下叙述中错误的是。

A)容器可以包含其他控件

B)不同的容器所能包含的对象类型都是相同的

C)容器可以包含其他容器

D)不同容器所能包含的对象类型是不相同的

【答案】B

【解析】容器是可以包含其他控件或容器的特殊控件,如表单及表格等。不同的容器所能包含的对象是不同的,如命令按钮组中可以包含命令按钮控件,而表单容器可以包含的是任意控件及页框、命令按钮组、Container对象、选项按钮组和表格。

【例8-5】PasswordChar属性仅适用于。

A)文本框B)组合框C)列表框D)复选框

【答案】A

【解析】PasswordChar属性用于指定用户输入的字符或占位符是否显示在文本框中,并确定用作占位符的字符。

8.2.2 填空题

【例8-6】在Visual FoxPro中,对象的引用方式有和。

【答案】绝对引用、相对引用

【解析】对象通过对象名来引用,对象的引用方式有绝对引用和相对引用,绝对引用是从包含该对象的最外面的容器对象名开始,一层一层地进行;相对引用是从当前位置开始通过使用关键字来引用。

【例8-7】Visual FoxPro的类有和。

【答案】容器类、控件类

【解析】Visual FoxPro的类有容器类和控件类两种,它们分别生成容器对象和控件对象。

【例8-8】设计表单时,从“数据环境”设计器窗口直接将字符型字段拖入表单则产生控件。

【答案】文本框

【解析】从“数据环境”设计器窗口等将字段、表或视图拖入表单,系统将产生不同的控件,拖动字符型字段产生文本框控件,拖动备注型字段产生编辑控件,拖动表或视图产生表格控

件。

8.2.3 操作题

【例8-9】通过表单界面浏览student表;

【操作步骤】

1.设计界面

①新建空白表单,可通过“文件”菜单下的“新建”,新建一个空白表单,也可在命令窗口发出下列命令:

CREATE FORM EDXS

系统自动创建一个空白表单。

②在表单中加入“数据环境”。表单中加入“数据环境”是为了在表单中操作表及其字段。单击空白表单→显示快捷菜单,如图8-1所示。单击“数据环境”。

图8-1 表单加入“数据环境”

③系统打开“数据环境设计器”的同时列出当前工作目录下可供选择是表文件,本例选择student .DBF,单击“确定”按钮,如图8-2所示。

图8-2 选择的表文件

④分别将student表中的字段拉到表单上,如图8-3所示。再在“表单”的下部加入5

个命令按钮Command1~Command5。

图8-3 字段拉到表单上

2.设置对象属性

对象属性如表8-1所示。

表8-1 对象属性

3.编写代码

●“第一个”命令按钮(Command1)的Click事件代码:

GO TOP

Thisform.Refresh

●“上一个”命令按钮(Command2)的Click事件代码:

IF !BOF()

SKIP -1

ENDIF

Thisform.Refresh

●“下一个”命令按钮(Command3)的Click事件代码:

IF !EOF()

SKIP

ENDIF

Thisform.Refresh

●“最后一个”命令按钮(Command4)的Click事件代码:

GO BOTTOM

Thisform.Refresh

“记录扫描”命令按钮(Command5)的Click事件代码:

SET EXACT OFF

js=0

LOCA FOR 学号=”01”

SCAN FOR 学号=”01”

Thisform.Refresh

Wait “”Timeout 1 && 等待1秒

js=js+1

ENDSCAN

MessageBox(“学号01打头共”+STR(js)+”人”)

4.运行表单

运行表单后的界面如图8-4所示。

图8-4 运行表单界面

【例8-10】设计表单czcj,要求通过输入学号和课程号,查找相关学生的姓名、课程名和成绩。

【操作步骤】

1.建好学生信息管理数据库,作为查找的数据源,建立相关关联和索引,如图8-5所示:

图8-5-1数据库及关联

Student表索引建立

Score表索引建立

Course表索引建立

图8-5-2三个表的索引建立

2.设计表单

新建一个空白表单CZCJ,在表单上放置表单控件对象(5个标签,5个文本框,一个命令按钮),并设置各个控件对象的属性,对象属性设置如表8-2所示。

表8-2 设置对象属性

设计后的表单界面如图8-6所示。

图8-6 “查找成绩表”表单的界面

3.编写事件代码

“查找”命令按钮(Command1)的Click事件代码:

txh=ALLTRIM(THISFORM.TextXH.Value)

tkch=ALLTRIM(THISFORM.TextKCH.Value)

IF EMPTY(txh).OR.EMPTY(tkch)

MESSAGEBOX("学号和课程号不能为空!")

RETURN

ENDIF

CLOSE ALL

OPEN DATABASE 学生信息管理

USE student IN 0 ORDER TAG 学号

USE score IN 0 ORDER TAG 学号课号

USE course IN 0 ORDER TAG 课程编号

Select score

SEEK txh+tkch

IF !EOF( )

THISFORM.TextCJ.Value=成绩

THISFORM.Refresh

Select student

SEEK txh

IF !EOF( )

THISFORM.Textxm.Value=姓名

THISFORM.Refresh

Select course

SEEK tkch

IF !EOF()

ThisForm.Textkcm.Value=课程名称

ThisForm.Refresh

ELSE

MessageBox("无此课程名称")

ENDIF

ELSE

Messagebox("无此学生姓名")

ENDIF

ELSE

Messagebox ("成绩表中没有此记录!")

ENDIF

USE

RETURN

4.保存表单名为“czcj”,运行此表单,输入学号及课程号,点击“查找”按钮,如图8-7所示。

图8-7 运行”查找成绩表”表单界面

【例8-11】设计登录表单,如果输入的学号与密码正确,调用【例8-10】的czcj表单。【操作步骤】

1.数据库设计

将“学生信息管理”数据库的student表增加一个字段“密码”,字符型,用于存放学生的登录密码,如图8-8所示。

图8-8 为student表增加“密码”字段

2.设计表单

新建一个空白表单Login,在表单上放置表单控件对象(2个标签,2个文本框,2个命令按钮),并设置各个控件对象的属性,对象属性设置如表8-3所示。

表8-3 设置对象属性

设计后的表单界面如图8-9所示。

3.编写事件代码

“确定”(Command1)按钮的Click事件代码

txh=thisform.text1.value

if empty(txh)

return

endif

use student order tag 学号

seek txh

if eof()

messagebox("无此学号!")

else

if alltrim(thisform.text2.value)=alltrim(student.密码)

use

yes=.T.

Thisform.Release

do form czcj

else

messagebox("密码不正确!")

endif

endif

use

return

“退出”(Command2)按钮的Click事件代码

Thisform.Release

4.运行表单,输入学号及密码,点击“确定”按钮,如图8-10所示。

图8-10 运行“用户登录”表单

8.3 习题

8.3.1 选择题

1.要定义标签控件的标题,应定义标签的属性。

A、FontSize

B、Caption

C、Height

D、AutoSize

2.以下属于非容器类控件的是。

A、表单

B、页面

C、标签

D、页框

3.设计表单时,可以用工具栏向表单中添加控件。

A、表单控件

B、表单设计器

C、布局

D、调色板

4.在表单运行中,如果复选框变为不可用,其Value属性值是。

A、0

B、2或Null

C、0

D、不确定

5.在表单控件中,既可作为接受输入数据,又可作为编辑现有数据的控件是。

A、文本框

B、列表框

C、复选框

D、标签

6.下列对象中,属于容器类的是。

A、文本框

B、表格

C、组合框

D、命令按钮

7.表单中的Init是指时触发的基本事件。

A、当创建表单

B、当从内存中释放对象

C、当表单装入内存

D、当用户双击对象

8.创建类时首先要定义类的。

A、事件

B、名称

C、属性

D、方法

9.表单控件工具栏用于在表单上创建。

A、文本

B、命令

C、控件

D、复选框

10.使用工具栏可以在表单上对齐和调整控件的位置。

A、调色板

B、表单控件

C、布局

D、表单设计器

11.利用表单控件工具栏创建一个控件,可以用来保存不希望用户改动的文本。

A、命令组

B、标签

C、文本框

D、复选框

12.在表单控件工具栏中要保存多行文本,可以创建控件。

A、文本框

B、编辑框

C、组合框

D、列表框

13.当用户按下并松开鼠标左键或在程序中包含了一个触发该事件的代码时,将产生事件。

A、Load

B、Active

C、Click

D、Error

14.要运行一个设计好的表单,可以在命令窗口使用命令。

A、RREATE FORM

B、LIST FORM

C、DO FORM

D、OPEN FORM

15.在表单控件工具栏中使用控件来执行命令。

A、文本框

B、组合框

C、页框

D、命令按钮

16.表单有自己的属性、方法和。

A、图表

B、容器

C、形状

D、事件

17.如果想使一个选项组中包括4个按钮,可将属性值设置为4。

A、Value

B、ButtonCount

C、ControlSource

D、Buttons

18.组合框和列表框的主要区别是。

A、组合框只有一个条目是可见的

B、组合框不提供多重选项的功能

C、组合框没有MultiSekect属性

D、以上三项均可以

19.在表单控件中,可包括多个选项卡的控件是。

A、文本框

B、编辑框

C、组合框

D、页框

20.为表单设置数据环境,可通过菜单调出“数据环境”设计器。

A、显示

B、文件

C、编辑

D、工具

8.3.2 填空题

1.标签控件的标题文本行最多可包含的字符数目有个。

2.控件的标题属性名为。

3.表单中可以输入多行文本的控件为。

4.在Visual FoxPro中,表单是一个,它可以容纳Visual FoxPro的对象。

5.表单的扩展名是,与表单同时产生的表单备注文件扩展名是。6.在命令窗口输入命令可打开表单设计器。

7.在表单中添加控件后,除了通过属性窗口为其设置各种属性外,也可以通过相应的为其设置常用属性。

8.选项按钮组属于类,它的属性表明该选项组中含有选项的数目。9.建立表单有三种方法,它们是、、。

10.由表单向导创建的表单,主要是依靠而定。

11.计时器控件的Enabled属性是用于控制计时器和。12.表单的设计是基于编程的思想。

13.单选按钮控件主要属性是和。

14.组合框控件是由一个和组成。15.ButtonCount属性是用来定义命令按钮组控件的个数。

附习题答案:

8.3.1选择题

1.B 2.C 3.A 4.B 5.A

6.B 7.A 8.B 9.C 10.C

11.B 12.B 13.C 14.C 15.D

16.D 17.B 18.D 19.D 20.A

8.3.2填空题

1.256

2.Caption

3.编辑框

4.容器

5..SCX、.SCT

6.CREATE FORM

7.生成器

8.容器类、BottonCount

9.表单向导、表单设计器、命令

10.数据环境

11.打开、关闭

12.可视化

13.个数ButtonCount、次序Value

14.列表框、编辑框

15.命令按钮

8.4教材习题答案

一、选择题

1.A 2.B 3.D 4.C 5.D

6.B 7.A 8.D 9.D 10.A

11.D 12.C 13.A 14.C 15.B

二、填空题

1.零、多

2.PASSWORDCHAR

3..T.

4.LOAD

5.1或"男"

6.COLUMNCOUNT

7.RELEASE

8..SCT

9.前

10.VISIBLE

三、操作题

1、操作步骤:

①.新建一个表单,依图所示在表单上放置表单控件对象(一个选项组(包含5个选项按钮),一个命令按钮(负责计算),一个文本框(负责显示计算结果)),并设置各个控件对象的属性,对象属性设置如下:

②.

“计算”命令按钮(Command1)的Click事件代码:

do case

case Thisform.Optiongroup1.value=1

s=0

i=1

do while i<=50

s=s+i

i=i+1

enddo

Thisform.text1.value=s

case Thisform.Optiongroup1.value=2

i=1

s=0

do while i<=50

if int(i/2)=i/2

i=i+1

loop

endif

s=s+i

i=i+1

enddo

Thisform.text1.value=s

case Thisform.Optiongroup1.value=3

i=1

s=0

do while i<=50

if int(i/2)=i/2

i=i+1

loop

endif

s=s+i

i=i+1

enddo

Thisform.text1.value=s

case Thisform.Optiongroup1.value=4

i=1

s=0

do while i<=50

if int(i/2)!=i/2

i=i+1

s=s+1

loop

endif

i=i+1

enddo

Thisform.text1.value=s

case Thisform.Optiongroup1.value=5

s=1

for i=1 to 50

s=s*i

endfor

Thisform.text1.value=s

endcase

Thisform.Refresh

2、操作步骤:

①.新建一个数据表:职工.DBF,它包含的字段有:姓名(c,8)、性别(男为.T.,女为.F.)、工作单位(c,8 有5个单位:外语系统、数学系统、物理系统、计算机系统、体育系统)、基本工资(N,7,2)。

②.在表单上放置表单控件对象(3个标签,一个复选框,一个组合框,一个文本框,两个按钮),并设置各个控件对象的属性。

③.编写代码:

●命令按钮1(Command1)的Click事件代码:

if thisform.Check1.value=1

store 0 to s,n

use yg

scan for 性别=.t.

s=s+基本工资

n=n+1

endscan

thisform.text1.value=s/n

else

store 0 to s,n

use yg

scan for 性别=.f.

s=s+基本工资

n=n+1

endscan

thisform.text1.value=s/n

endif

●命令按钮2(Command2)的Click事件代码:

Thisform.release

8.5 实验题

1、设计一个表单,要求表单上三个文本框同步显示文字内容。

2、设计一个表单,将student表中所有记录的姓名显示在一个列表框中,而在此列表框中选中的姓名以及该学生的出生日期和入学成绩将会自动显示在右边的文本框中。

3、设计一个表单,从表单中可选择student表、score表、course表3个表中的一个进行浏览或编辑。

4、设计一个简单的计算器表单。

5、设计一个表单,要求具有更改字体、更改字号大小、加粗、倾斜等功能。

6、设计一个表单,要求带有表格控件,根据所选定按部门实现对“student”表中的学生信息进行查询。

7、设计一个表单,实现简易计算器的功能。

8.6 实验题答案

1、(1)设计表单

新建表单,在表单上放置表单控件对象(3个文本框,2个命令按钮),并设置各个控件对象的属性,对象属性设置如表8-4所示。

表8-4 设置对象属性

设计后的表单界面如图8-11所示。

图8-11 “文本框同步”表单

(2)编写事件代码

● 文本框(Text1)的InteractiveChange 事件代码: t=Thisform .text1.value Thisform .text2.value=t Thisform .text3.value=t Thisform .Refresh

● 文本框(Text2)的InteractiveChange 事件代码: t=Thisform .text2.value Thisform .text1.value=t Thisform .text3.value=t Thisform .Refresh

● 文本框(Text3)的InteractiveChange 事件代码: t=Thisform .text3.value Thisform .text1.value=t Thisform .text2.value=t Thisform .Refresh

● “清除”命令按钮(Command1)的Click 事件代码: Thisform .text1.value=” ” Thisform .text2.value=” ” Thisform .text3.value=” ” Thisform .Refresh

(3)运行结果如图8-12所示。

图8-12 “文本框同步”表单运行

2、(1)设计表单

新建表单,在表单上放置表单控件对象(1个列表框,4个标签,3个文本框),并设置各个控件对象的属性,对象属性设置如表8-5所示。

表8-5 设置对象属性

设计后的表单界面如图8-13所示。

图8-13 列表框显示表单

(2)编写List1的InteractiveChange事件代码:

LOCATE FOR 姓名=This.value

Thisform.Refresh

(3)运行结果如图8-14所示。

相关文档