80
VFP 课课课课课 课课课 课课课课课课课

第七章  表单设计与应用

  • Upload
    ted

  • View
    92

  • Download
    0

Embed Size (px)

DESCRIPTION

第七章  表单设计与应用 . 1. 面向对象的概念. 2. 创建表单. 3. 常用表单控件. 4. 综合应用. 目录. 7.1 面向对象的概念 . 当前计算机程序设计基本上可以分为两种:一种是前面第六章所讲的结构化程序设计。在结构化程序设计中,程序的开发者处于完全支配状态。程序执行的流程遵从程序员预先规定的路径。程序的开发者把一个待求解的问题自上到下进行分解,以便形成一个个相对简单独立的子问题,然后用子程序或函数来解决这些子问题,用子程序或函数之间的数据通信来模拟这些子问题间的联系,最后把这些子程序或函数装配起来以形成解决问题的完整程序。 - PowerPoint PPT Presentation

Citation preview

Page 1: 第七章  表单设计与应用

VFP 课程建设组

第七章 表单设计与应用

Page 2: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

目录

面向对象的概念 1

创建表单 2

常用表单控件 3

综合应用 4

Page 3: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1 面向对象的概念 当前计算机程序设计基本上可以分为两种:一种是前面第六章所讲的结构化程序设计。在结构化程序设计中,程序的开发者处于完全支配状态。程序执行的流程遵从程序员预先规定的路径。程序的开发者把一个待求解的问题自上到下进行分解,以便形成一个个相对简单独立的子问题,然后用子程序或函数来解决这些子问题,用子程序或函数之间的数据通信来模拟这些子问题间的联系,最后把这些子程序或函数装配起来以形成解决问题的完整程序。 另一种方法就是面向对象的分析与设计。在面向对象的程序设计( Object-

Oriented Programming )中,对象是组成程序的构件,就好像是在面向过程的结构化程序设计方法中的子程序和函数一样。在面向对象的程序设计方法中,程序设计人员不是完全按照过程对求解问题进行分解,而是按照面向对象的观点来描述问题、分解问题,最后选择一种支持面向对象方法的程序语言来解决问题。在这种方法中,设计人员直接用一种称之为“对象”的程序构件来描述客观问题中的“实体”,并用“对象”间的“消息”来模拟实体间的联系,这样讲“对象”有机的结合在一起,便构成了面向对象的应用程序。

Page 4: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.1 对象与类 一、对象( Object ) 客观世界里的任何实体都可以被看作是对象。每个对象都具有其区别其它对象的独特存在状态和客观行为。对象可以是现实世界中的任何物体,例如一辆汽车、一张桌子、一台计算机,也可以指某些概念。对象都具有一定的属性、特征,并可以产生一定的行为。属性实际上就是描述该对象的一系列数据,如一张桌子有材料、规格、尺寸、颜色等描述数据。而行为则是对该对象施加的操作,如对一张桌子要进行放置、擦洗等动态操作行为。 在 Visual FoxPro 中,表单是对象,标签是对象,命令按钮是对象,界面上几乎所有事物都是对象,每个对象都有自己的属性和方法。一个对象具有状态、行为和标识,对象的状态包括它的属性和这些属性的当前值。

Page 5: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.1 对象与类 二、类( Class ) “ 类”是具有相同属性特性和行为规则的 “对象”的集合。从程序设计的角度来讲,“类”是一个数据模式和若干个程序过程经过封装而形成的一个整体,它是对现实世界的一种模拟与抽象,类就象是一类对象的模板,而“对象”则是“类”的一个具体实例,“类”的功能只有通过产生一个对象并且引用该对象才能实现。例如:可以把“球”看作是一个类。它具有“种类”、“形状”等特性,以及进行运动、游戏等操作。每一个具体的“篮球”、“足球”都可以看作是“球”类中的对象。 类决定了对象的特征,所有对象的属性、事件和方法程序在定义类时被指定。有了类的定义后,就可以基于类生成这类对象的任何一个对象。由同一个类生成的对象虽然采用了相同的属性来表示对象的状态,但它们的属性取值可以完全不同,因而它们有着不同的状态,彼此保持相对独立。

Page 6: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.1 对象与类 三、类的特点 1 .封装性 类的封装性是指将类的特性及其方法程序加以隐蔽,全部封装在类的内部,不让其复杂性暴露在外面。程序开发人员在使用类时无需知道类中的具体技术代码,不用对它进行控制和干预,只需直接使用从类派生出来的对象即可。 2 .继承性 继承是面向对象中的一个重要概念,是指在基于现有的类创建新类时,新类继承了现有的类的属性和方法,此外,新类中还可以有自己所特有的新的属性和方法。它表达了从一般到特殊的进化过程。在使用子类或对象时,可以直接调用父类的属性和方法。对父类的修改可以影响其所有的子类,这种自动更新机制大大节省了开发人员的时间和精力,减少了维护代码的难度。 3 .多态性 多态性是指允许不同类的对象对同一消息作出响应。也就是说,在类等级中的不同层次可以共享 ( 公用 ) 一个方法名,但不同层次中的各个类却各自按照自己的需要来实现这个方法。

Page 7: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.2 Visual FoxPro 中的类与对象 一、基类与子类Visual FoxPro 为了方便用户使用,提供了大量已经定义的类,这些类称为基类。每个基类都有自己的属性、事件和方法。用户很容易从基类中生成一个类,从基类派生出来的类称为子类,也称作自定义类。基类称为父类。一个子类还可以作为父类进一步派生出新的子类。类还可以细化为子类,就像“球”可以派生出“大球”子类和“小球”子类,而“球”是这两个子类的父类。“大球”还可以派生出“篮球”、“足球”等。一个子类可以继承父类中的全部功能,还可以在此基础上添加新的属性和方法。

Page 8: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.2 Visual FoxPro 中的类与对象 二、容器与控件 Visual FoxPro 中的基类分为两大类型:容器类和控件类。 ( 1 )容器类 容器类可以包含其他对象,并且允许访问这些对象。无论在设计时刻还是在运行时刻,容器类对象和它所包含的对象都被当作一个独立的对象进行操作。在对象的层次中,容器中被包含的对象处于容器对象的下一层。表 7-1 Visual FoxPro 的容器类和能包含的对象 容器能包含的对象容器 (Container) 任意控件表单集 (FonnSet) 表单、工具栏表单 (Form) 页框、任意控件、容器或自定义对象表格

(Odd) 表格列表格列 (Column) 表头和除表单集、表单、工具栏、计时器和其他以外的其余对象页框 (PageFrame)页面页面 (Page) 任意拄件、容器和自定义对象工具栏 (ToolBar) 任意控件、页框和容器选项按钮组 (OptionButtonCn'oup) 选项按钮命令按钮组 (CommandButtonGroup) 命令按钮( 2 )控件类

控件类是一个相对独立的整体,不能包含其他对象。包括标签、文本框、编辑框、命令按钮、复选框、列表框、组合框、微调按钮、图像、计时器、 ActiveX 控件、线条、形状和分页符等。控件类比容器类封装得更为严密,但也因此丧失了一些灵活性。

Page 9: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.2 Visual FoxPro 中的类与对象 ( 3 )对象的引用层次 对象之间包含与被包含的关系,产生了对象的层次关系,这与类的层次概念是不同的。类的层次关系体现了类之间继承与被继承的关系,对象的层次关系体现了包含与被包含的关系。容器内的对象还可以再作为其他对象的容器,不同的容器所能包含的对象也不同。 在面向对象程序设计时,往往要引用容器中某个特定对象,这时就要,就要指明对象在容器嵌套层次中的位置,引用格式中用点“.”分隔。 对象的引用有两种方式:绝对引用和相对引用。绝对引用:指从最上层开始,一层层向下,提供完整的对象地址。 【例 7-1】设置图中命令按钮 Commandl 的标题为“退出” 程序代码: Formset.Form.commandgroup.commandI.caption="退出” 即表单集 .表单 .命令按钮组 .命令按钮 1.caption="退出” 相对引用对象:从当前对象出发,逐层向高一层或低一层起到另一对象的引用称为相对引用。

Page 10: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.3 、属性、事件和方法1 .属性 (Attribute)属性即对象的特性,是对象的外观及行为的特征。例如一辆汽车的大小、颜色、品牌,汽车的停止和行驶的两种状态,这些都是一辆汽车的属性。基本属性是在相应的类中定义好的,当然每个对象也有自己的一些特性,例如同样是轿车,有的可以自动换档,有的只能手工换档。在 Visual FoxPro 中,各种对象具有 70多个属性,如对象的标题 (Caption) 、文字的对齐方式

(Alignment) 等就是对象的属性。从功能上看,各种对象的属性可以分为布局和修饰属性、数据属性、状态属性和其他属性四大类。

Page 11: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.3 、属性、事件和方法属性值既能在设计时、也能在运行时进行设置。在设计时对对象进行属性设置是通过属性窗口完成的,而在运行时对对象进行属性设置是通过编制程序代码并将之放在事件代码或方法代码中完成的。在程序中设置或修改属性的命令格式: Container.Object.Property=Value即:容器 .对象 .属性 = 属性值在程序中引用属性值的命令格式:变量名= [ 表单集名 .] 表单名 .属性名

Page 12: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.3 、属性、事件和方法 2 .事件( Event ) 事件是对象可以识别和响应的行为与操作,由用户或者系统激活,用户可以编写相应的代码对此进行响应。一个事件有一个事件名,一个事件与一个事件程序相关联,当作用在一个对象上的事件发生时,与这个事件相关联的程序就获得一次运行。例如,事件可以由用户的一个动作产生,如单击鼠标或按下一个键盘按键;也可以由于程序代码或系统产生,如计数器溢出事件等。 在 Visual FoxPro 中事件集是固定的,用户不能再创建新的事件。对象可以响应系统提供的 50多个事件,有的事件具有通用性,多个控件都能触发,如 Click 事件;有的事件只适用于专门的控件,如 Interactivechange 事件只适应用于列表框和组合框。

Page 13: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.3 、属性、事件和方法编写事件代码时注意两条原则:( 1 )每个对象独立地接收自己的事件;( 2 )容器事件和控件事件互相独立。只要控件本身编写事件代码,无论是一般容器还是组容器,都先执行控件自己的事件代码;如果控件本身没有编写事件代码,且控件是在组容器中,执行父容器的同名事件代码,如果控件是在一般容器中,则控件不执行任何操作。注:组容器指的是命令按钮组和选项按钮组。

Page 14: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.3 、属性、事件和方法 3 .方法( Method ) 方法是对象可以执行的动作,是封装在对象内部的,在任何时候都不能独立存在于对象之外。例如,对表单对象打开

(open) 和关闭 (close) 的操作是表单所具有的方法。用户无需再自己编写打开和关闭的程序代码。表单所具有的内置的代码或缺省的代码将告诉 Visual FoxPro 如何打开和关闭它们。在 Visual FoxPro 中提供了 50多种不同的方法,每种方法都有自己的名称,称为方法名。 Visual FoxPro 中不同的对象具有不同的方法,与事件不同的是,方法程序集合可以无限扩展,除了在各个类中已定义的方法外,可以根据需要自定义方法 ( 向类中添加新方

法 ) ,以完成相应的操作,新建的方法属于表单或表单集。

Page 15: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.3 、属性、事件和方法方法的调用格式:[ 变量名= ]=[表单集名] .表单名 .对象名 .方法名(参数表)Visual FoxPro 中不同的对象具有不同的方法,与事件不同的是,用户可以定义新的方法,新建的方法属于表单。以下列出几个常用的方法功能及使用:( 1 ) Hide 方法功能:隐藏表单、表单集或工具栏。适用范围:表单、表单集、 SCREEN 、工具栏。语法格式:对象 .Hide

Page 16: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.3 、属性、事件和方法 ( 2 ) Refresh 方法 功能:重画表单或控件并刷新所有值。 适用范围: Visual FoxPro 中所有的对象,包括复选框、列、组合框、命令按钮、命令组、容器对象、控件对象、编辑框、表单、表单集、表格、标头、列表框、 OLE绑定型控件、 OLE容器控件、选项按钮、选项组、页面、页框、 SCREEN 、微调、文本框和工具栏。 语法格式:对象 .Refresh 说明 一般地,画表单或控件是在没有事件发生时自动处理的。需要立刻更新表单或控件时可用 Refresh 方法。刷新表单的同时,也刷新表单上所有的控件;刷新页框时,只刷新活动的页。 ( 3 ) Release 方法 功能:释放表单集或表单。 适用范围:表单、表单集、 SCREEN 。 语法格式:对象 .Release 。

Page 17: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.1.3 、属性、事件和方法 ( 4 ) SetFocus 方法 功能:为一个控件指定焦点,确定当前的操作对象。适用范围:复选框、列、组合框、命令按钮、容器对象、控件对象、编辑框、表格、列表框、 OLE绑定型控件、 OLE容器控件、选项按钮、微调和文本框。 语法格式:对象 .SetFocus ( 5 ) Show 方法 功能:显示表单、表单集或工具栏。适用范围:表单、表单集、 _SCREEN 和工具栏。 语法格式:对象 .Show

Page 18: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2 创建表单 表单是用户与 Visual FoxPro8.0 应用程序之间进行数据交换的界面,是最为常用的数据显示及编辑方式,它可以包含各种不同的控件,用户通过可视化的设计方法,利用这些控件制作不同的按钮、下拉框、选项框等,使用户能利用友好、美观的人机交互界面进行数据的接收、显示和编辑,实现与应用程序的连接。表单是 Visual FoxPro8.0 的特色所在,它克服了浏览、查询、视图等交互界面的呆板和不够丰富。表单是以文件形式保存其内容,表单文件扩展名为 .SCX 。 根据表单数据来源的不同,可将表单分为以下几种类型: ( 1 )简单表单,该表单的数据来源于某一个表或某一个视图。 ( 2 )复杂表单,该表单的数据来源于多个表或多个视图。 ( 3 )一对多表单,该表单的数据来源于两个表,这两个表必须是按一对多的关系连接起来,其中一个为父表,另一个为子表。

Page 19: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.1 用表单向导创建简单表单 1 .简单报表的创建 “ 表单向导”对于初学者来说特别适用,用户不需要编写程序代码便可生成简单的表单程序。 【例 7-1】以 student 表为数据来源,制作显示学生信息的表单

( student.scx) 。

图 7-1项目管理器图 图 7-2“新建表单”对话框

Page 20: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.1 用表单向导创建简单表单 操作步骤: ( 1 )打开“项目管理器”,选择文档标签,然后选择“表单”项。单击“新建”按钮,出现“新建表单”对话框。或者在 Visual FoxPro菜单栏中,选择“文件”菜单栏中的“新建”选项。在弹出的“新建”对话框中指定文件类型为“表单”。( 2 )在“新建表单”对话框中选取“表单向导”按钮或者在“新建”对话框中选取“向导”按钮,出现 “向导选取”对话框。 ( 3 )在“向导选取”对话框中有“表单向导”和“一对多表单向导”两个列表选项,其中“表单向导”用来创建单个表或单个视图的表单:“一对多表单向导”用来创建一组父表记录及其相关子表记录的表单。本例选择的是“表单向导”。

Page 21: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.1 用表单向导创建简单表单 ( 4 )单击“确定”按钮后,出现表单向导的第一个对话框。这一步主要选择数据库表或自由表中的全部“字段”或部分“字段”,作为表单的显示对象。本例选择“ student” 数据表中字段名为学号、姓名、性别、出生日期、系科、总分等六个字段。 ( 5 )单击“下一步”按钮后,出现表单向导第二个对话框,该步骤主要用来选择表单的显示格式,从样式选项框中选中一个样式后,对话框左上角的放大镜中显示出该样式的运行效果。向导系统提供了九种格式供用户选择,它们分别是标准式、凹陷式、阴影式、边框式、浮雕式、新奇式、石墙式、亚麻式、彩色式。本例选择的是标准式。 在对话框的按钮类型选框中,有文本按钮、图片按钮、无按钮和定制 4种类型,本例选择的是文本按钮,表示表单将自动生成一组以文本表示的命令按钮。 ( 6 )单击“下一步”按钮,出现表单向导第三个对话框。该对话框主要用来选择排序关键字,并确定升序排序还是降序排序,本例选择的是“读者编号”作为关键字,按升序排序。

Page 22: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.1 用表单向导创建简单表单 ( 7 )单击“下一步”按钮后,出现表单向导第四个对话框,在该对话框中,要求用户输入表单标题,系统默认值为“读者”,下而的三个单选项和三个复选项主要用来询问在创建完这个表单后要做的工作。如选择单选项“保存表单以备将来使用”,则可将创建好的表单保存以备今后使用;如果选择单选项“保存并运行表单”,则可将表单保存,然后立即运行;如果选择单选项“保存表单并用表单设计器修改表单”,则会在表单保存后弹出表单设计器。为了对当前设置的表单进行预览,可单击右面的‘‘预览’’按钮。预览后,单击“返回向导”按钮即可回到表单向导。如果不满意,可以回到上一步进行修改。 ( 8 )保存表单。单击“完成”按钮,系统弹出一个“另存为”对话框,要求用户选择表单文件保存的磁盘路径,输入新的表单文件名,并在“保存类型”下拉表中选取“表单”类型。单击“保存”按钮,该表单就保存到了磁盘上。

Page 23: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.1 用表单向导创建简单表单( 9 )在表单设计器窗口,选择“表单”菜单中的“运行”命令,或直接单击工具栏中的运行按钮,则得到表单的运行结果,单击“下一个”按钮可查看下一位同学的信息。注意这种方法必须先进入表单设计器窗口,并且确认已打开了要运行的表单。一般在表单设计或修改时使用,显得方便、直接,便于对表单进行编辑修改。

Page 24: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.1 用表单向导创建简单表单 2 、一对多表单的创建 创建一对多表单主要是显示表与表之间的相互关系,在实际应用中运用很广泛。 【例 7-2】在学生成绩管理系统中,运用 student 表和 assign 表查阅某位学生的成绩情况,创建表单 ( 学生成绩 .scx) 。 操作步骤: 步骤( 1 ),步骤( 2 )与例 7-1 相同。 ( 3 )在“向导选取”对话框中,选择“一对多表单向导”,如图 7-13 所示。

图 7-13 选择“一对多表单向导” 图 7-14 从父表中选取字段对话框

Page 25: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.1 用表单向导创建简单表单 ( 4 )单击“确定”按钮,出现对话框。从父表中选取所需字段,这些字段将显示在表单的上半部。本例选择的是“学生成绩管理系统”数据库中“ student” 表的部份字段。对话框右面的按钮可选取其它数据库或表来作为父表。 ( 5 )单击“下一步”按钮,出现对话框,在对话框中选择与父表有直接关系的子表,从子表中选择要在表单中显示的字段,这些字段在表单中将显示在父表下的表格中。本例选择的是“学生成绩管理系统”数据库下“ assign” 表的全部字段。 注意 在创建一个一对多表单时,两个数据表之间应该可以建立连接关系,否则无法创建一对多表单。 ( 6 )单击“下一步”按钮,出现对话框。该对话框为一对多表单中的两个数据表之间建立关系。本例选择的是“学号”作为“ student”表与“ assign” 表之间的关键字段。 ( 7 )单击“下一步”按钮,出现对话框,该对话框用来选择表单样式和按钮类型,在这里选择的是“标准式”表单样式,而按钮类型选择的是“图片按钮”。

Page 26: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.1 用表单向导创建简单表单 ( 8 )单击“下一步”按钮,出现对话框,该对话框用来选择父表中的排序关键字。与创建一对一表单时选择的排序字段相同,在这里选取“学号”字段作为父表升序排序的关键字。 ( 9 )单击“下一步”按钮,出现对话框,该对话框用来输入表单标题名,并选取“保存表单以备将来使用”单选项。 ( 10 )单击“预览”按钮后,出现如图 7-19 所示的“读者借书查询”表单窗口。点击“返回向导”按钮,则返回到图 7-18 所示的对话框,然后单击“完成”按钮,对所建表单进行保存。 ( 11 )运行该表单后,用户可通过读者借书查询表单提供的按钮,对表单中的数据进行查询、打印、编辑、删除等操作,其中搜索时仅用于父表中记录的筛选;删除时仅用于父

表的当前记录。

图 7-18 完成一对多表单的对话框 图 7-19读者借书查询表单预览窗口

Page 27: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单表单向导创建的表单功能较为固定,不能满足复杂的功能要求。在实际应用中,运用表单设计器可以完全按照自己的意图来创建表单。表单设计器是

Visual FoxPro提供的一个操作简单、灵活方便的界面设计工具。在表单设计器中使用表单控件工具栏可以向表单中添加控件对象,使用调色板工具栏可以为表单及其中的控件对象进行着色。使用布局工具栏可以排列和调整表单中的控件对象的位置尺寸。使用数据环境设计器可以为表单添加数据环境。

Page 28: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单 1 .创建普通表单【例 7-3】利用表单设计器设计如图所示的“学生成绩管理系统”的封面表单。 操作步骤: 1 .在主菜单栏下,单击“文件”菜单项下的“新建”项,也可直接单击工具栏中的“新建”按钮,在“新建”对话框中选择“表单”单选按钮。 2 .单击“新建文件”按钮,出现一个标题为“ Form1” 的空表单,该窗口中的空白区域用来布置表单控件,同时VFP工具栏中增加了窗体设计器工具栏,如图 7-21 所示。

图 7-21 窗体设计器工具栏

Page 29: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单 3 .选择菜单“显示->属性”命令(或直接单击上面提到的属性窗口按钮),弹出“属性”窗口,如图 7-22 所示。

图 7-22  属性窗口

4 .在表单设计器中单击表单,使其成为当前对象,在属性窗口中定义 Form1 的属性如下:Caption :学生成绩管理系统封面

Top : 0Left : 0

WindowState : 2

Page 30: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单 5 .在属性窗口选中“ Picture” ,点击按钮进入打开文件对话框,选择准备好的一张图片,如图 7-23 所示,单击“确定”,回到属性窗口,选中的图片“ bg.jpg” 就成为表单的背景图片。

图 7-23  属性窗口

Page 31: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单 6 .在表单设计器中添加三个新标签,可以调整三个控件的大小和位置。按照表 7-4 设置三个控件的属性。

表 7-4  三个标签的属性设置 属性 Label1 Label2 Label3

Caption “ 欢迎使用学生成绩管理系统!” 开发: VFP 课程组 2008 年 6 月fontsize 30 18 14

BackStyle 0- 透明 0- 透明 0- 透明ForeColor 255,255,0 128,0,0 128,0,0

7 .选择菜单“文件->保存”,保存为“ main.frx”,单击按钮将运行该表单 .

Page 32: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单 2 .设计能读取表中数据的表单 要设计一个表单用于从数据表读取或写入数据,需要用到数据环境设计器。数据环境是表单设计的数据来源,每个表单都包含一个数据环境。数据环境是一个包含表、视图以及表之间关联的容器对象。引入数据环境的目的在于: 打开或者运行表单时自动打开表和视图 ( 通过设置数据环境的相应属

性 ) 。 可以通过数据环境中的所有字段来设置控件的 ControlSource 属性。 关闭或者释放表单时自动关闭表和视图。 【例 7-4】利用表单设计器为“学生成绩管理系统”的数据表

student.dbf 创建一个记录浏览表单。 1 .如上例的步骤 1 和 2 进入表单设计器窗口。 2 .添加一个标签 Label1 ,属性设置如下: Caption :学生信息浏览 Fontsize : 18

Page 33: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单 3 .选择菜单“显示->数据环境”,或将鼠标指向表单设计器窗口的空白处,单击右键弹出快捷菜单,选择“数据环境”命令,打开“数据环境设计器”窗口,如图 7-25 所示。当数据环境激活时,在菜单栏中将显示“数据环境”菜单项,用于完成视图和表的添加、移去和浏览功能。

图 7-25  数据环境设计器 图 7-26  “添加表或视图”对话框 4 .在“数据环境”空白区域中单击鼠标右键,在弹出的快捷菜单中选择“添加”。在弹出的“添加表或视图”对话框中选择需要的表或视图,这里我们选择表student, 如图 7-27 所示。

Page 34: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单 5 .如图 7-27(a) 所示,选中数据环境设计器中的表 student 中的字段“学号”,拖动到表单中,在表单中自动建立了一个标签对象和一个文本框对象,重复这一操作将姓名、性别、出生日期、系科、总分字段拖动到表单中,适当调整各个控件的位置和大小,结果如图 7-27(b) 所示。

图 7-27 将数据环境设计器中的表的字段拖动到表单中 7 .在“表单控件”栏中,用鼠标左键单击命令按钮控件,在表单的底部位置上拖放或单击鼠标左键,将命令按钮加入到表单中,系统默认命名为 command1 。

Page 35: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单 8 .单击选中 command1 ,按右键弹出快捷菜单,选择“复制”,再在表单空白处选择“粘贴”,增加一个命令按钮 command2 ,用同样的方法再增加一个命令按钮 command3 。 9 .移动按钮的位置,使三个按钮对齐。 10.逐个选定三个命令按钮,如表 7-6 所示,分别定义其属性。

表 7-6  三个命令按钮的属性设置 对 象 名属 性 command1 command2 command3

Caption 上一条 下一条 退出Height 25 25 25width 60 60 60

FontName 宋体 宋体 宋体

Page 36: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单 11.选择菜单“显示-> 代码”,弹出代码窗口。 12.在对象列表框中选定“ command1” ,在“过程”列表框中选定“ Click” ,在代码窗口中输入代码。 程序代码: skip -1 if bof() this.enabled=.F. thisform.command2.enabled=.T. else this.enabled=.T. thisform.command2.enabled=.T. endif

Page 37: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.2.2 用表单设计器创建表单 13.同样,定义 command2 的 Click 事件代码如下: skip if eof() this.enabled=.F. thisform.command1.enabled=.T. else this.enabled=.T. thisform.command1.enabled=.T. endif 定义 command3 的 Click 事件代码如下: thisform.release 14.关闭代码窗口,将该表单保存为“学生信息 .SCX” ,然后运行该表单,运行结果如图 7-30 所示。单击上一条、下一条,表单中数据将随之变化。单击退出将退出该表单,回到表单设计器窗口。

Page 38: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3 常用表单控件 在表单中,控件是用来显示数据、执行命令的图形对象,是表单设计的主角,使表单具有友好的界面和交互功能。在 Visual FoxPro 中,可以有两种类型控件:绑定型控件和非绑定型控件。绑定型控件是指控件在设计时与表或视图中的字段相连接,通过绑定型控件可以向表或视图中的字段输入数据,或者从表或视图中的字段选择数据:非绑定型控件就是指在设计时与表或视图没有任何联系,是独立的。下面介绍 Visual FoxPro提供的一些常用控件的使用方法。

Page 39: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.1 标签控件 标签是最常用的一种控件,用来显示文本,顾名思义标签只能用作输出信息,而不能接受输入或进行编辑。标签的一般功能是显示各种文本类型的提示信息,因此标签可以用作标题、栏目,或者用于对输入或输出区域的标识。标签控件的常用属性如表 7-9 所示。

表 7-9 标签的常用属性 属性 说明Caption 标签的标题,用于显示提示信息Autosize

设置标签是否自动随着 Caption 属性的文本长度的增长而自动调整长度,其值为真 ( .T . ) 或假 ( . F . )

FontnameCaptaon 属性的文字所用字体的类型

Fontsize caption 属性的文字所用字体的大小Wordwra

p指定当 Autosize 属性为. T .时,标签控件是沿纵向扩展还是沿横向扩展,即确定标签上显示的文本能否换行

Page 40: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.2 命令按钮 命令按钮通常用来进行某一个操作、执行某个事件代码、完成特定的功能,如关闭一个表单、查询一条记录、打印报表等,是最常用的控件之一。命令按钮的常用属性如表 7-10 所示。 命令按钮的常用事件是 Click 事件,当单击命令按钮时,就触发了该事件。命令按钮的常用方法是 Seffocus 方法,其功能是使命令按钮得到焦点。

表 7-10 命令按钮的常用属性 属性 说明

Cancel 当该项为“ .T.” 时,回车时相当于按下“ ESC” 键Default

当该项为“ .T.” 时,回车时相当于鼠标单击“ Click”表单中的命令按钮中,只能有一个按钮的 Default 属性为“ .T.”

Name 指定命令按钮的名称Enabled 当前命令按钮是否有效Visible 当前命令按钮是否可见

Page 41: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.2 命令按钮 【例 7-7】设计一个表单,利用单击按钮改变标签字体的颜色为红色,界面如图 7-31 所示。

图 7-31 改变标签字体颜色

操作步骤: ( 1 )选择控件 本例中使用标签控件和命令按钮控件。 ( 2 )属性设置 表单的 Caption 属性改为“设置标签文字颜色”。 标签的 Fontsize 属性改为 16 。 命令按钮的 Fontsize 属性改为 10 , Caption属性改为“改变颜色”。 ( 3 )编写代码 选择命令按钮,双击打开代码窗口,在 Click 事件中输入如下代码: Thisform.Label1.ForeColor=RGB(255,0,

0) Thisform.Refresh   ( 4 )保存并运行表单,单击“改变颜色”按钮,文字“欢迎使用学生成绩管理系统”将变为红色。

Page 42: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.3 命令按钮组 命令按钮组是包含多个命令按钮的容器对象,它将预定义的命令组提供给用户。组中按钮可以单独操作,也可以作为一个组来统一操作,这在表单的设计中经常用到。当一个事件在组中的某个按钮上发生时,命令按钮组的 Value 属性应指明该事件发生在哪个按钮上。 ( 1 )命令按钮组的常用属性如表 7-11 所示。

表 7-11 命令按钮组的常见属性 属性 说明Name 指定命令按钮组的名称Value 确定已经被选中的按钮是按钮组中的哪一个按钮

Backcolor 指定命令按钮组的背景色Buttoncount 设置命令按钮组中的选项按钮个数

Buttons 确定命令按钮组中的第几个选项按钮Enabled 指定命令按钮组是否响应用户事件

Page 43: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.3 命令按钮组 ( 2 )命令按钮组的常用事件 命令按钮组最常用的事件就是 Click 事件,当用户单击命令按钮组时,就触发该事件。 ( 3 )选择命令按钮组中的命令按钮 命令按钮组是 Visual FoxPro 中的一个基类控件,无论命令按钮组中设置了多少个按钮,它总是以一个整体作为一个对象放置在表单中,其属性指它的整体属性。但每个命令按钮执行的操作往往不同,所以设置每个按钮的属性或编写每个按钮的事件代码时需要分别进行。因此,需要把每个按钮“拆分”开,然后为每个按钮单独进行属性设置,编写事件代码,其过程如下: 用鼠标右键单击命令按钮组,弹出快捷菜单 在快捷菜单中选择“编辑”命令,则用户用鼠标可以选中任一个按钮进行“编辑”,进行属性设置和代码的编写工作。 也可以在属性窗口的对象框中直接选择某个命令按钮进行“编辑”。

Page 44: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.3 命令按钮组 【例 7-8】在表单上有一个命令按钮和命令按钮组,该命令按钮组包括3 个命令按钮。 当单击命令按钮组中某个按钮时,命令按钮组的背景色变成相应按钮指定的颜色;单击还原命令按钮,命令按钮组背景色还原成默认的颜色,其界面如图 7-32 所示。

图 7-32 设置命令按钮组的背景颜色

Page 45: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.3 命令按钮组 操作步骤: ( 1 )选择控件 本例中使用一个命令按钮组控件和一个命令按钮控件。 ( 2 )属性设置 命令按钮组默认的命令按钮个数为 2 个,如果要添加更多命令按钮,方法如下。 a. 用鼠标右键单击命令按钮组 b. 在属性窗口中设置 Buttoncount 属性,本例中设为 3 Commandgroupl 中的 3 个命令按钮的标题属性和

Commandl 的标题属性设置如图 7-36 所示。

Page 46: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.3 命令按钮组 ( 3 )编写代码 选择命令按钮和命令按钮组的 Click 事件来完成相应的功能,代码如下: D0 Case Case This.Value=1 This.Backcolor=Rgb(255,0,0) Case This.Value=2 This.Backcolor=Rgb(255,255,0) Case This.Value=3 This.Backcolor=Rgb(0,0,255) Case This.Value=4 This.Backcolor=Rgb(255,255,255) Endcase Thisform . Refresh 还原命令按钮的 Click 事件代码: Thisform.Commandgroupl.Backcolor=Rgb(192,192,192) Thisform.Refresh

Page 47: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.4文本框 与标签不同,文本框有自己的数据源,并可以进行输入和修改,主要用于编辑或显示文本变量或字段的值。相对于标签固定的文本信息,文本框通常以表的一个字段或一个内存变量作为自己的数据源。文本框一般只包含单行数据。文本框几乎可以编辑任何类型的数据,如数值型、字符型、逻辑型、日期型等。 【例 7-9】设置密码对话框。表单中要有一个接收用户信息的控件,并且对输入的密码应保密,密码是否正确也应有相应的提示。 操作步骤: ( 1 )选择控件。 本例中使用标签控件和文本框控件,如图 7-33 所示。其中一个标签放在文本框前,说明文本框的操作,文本框接收从键盘的输入值,第二个标签提示登录成功与否的信息。

图 7-33 控件的选取和属性设置

Page 48: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.4文本框 ( 2 )属性设置。 表单的 Caption 属性设为“登录”。 按钮的 Caption 属性设为“登录”。 标签 1 的 Caption 属性设为请输入密码。 标签 2 的 Visible 属性设为 .F. 。 文本框的 Passwordchar 属性设为 * 。 ( 3 )编写代码。 双击按钮,打开代码窗口,在 Click 事件中输入如下代码: Thisform.Label2.ViSible= . T. If Thisform.Text1.Value="123456" then Thisform.Label2.Caption=“欢迎登录学生成绩管理系统 !” Else Thisform.Label2.Caption=“你输入的密码错误 !” Endif Thisform.Refresh

Page 49: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.5编辑框文本框只能编辑一行文本,在使用上有一定的局限性,在编辑框中允许编辑长字段或备注字段文本,允许自动换行并能用方向键、 PageUp键和

PageDown键以及滚动条来浏览文本。编辑框的与文本框的使用方法基本一致。

Page 50: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.6复选框 复选框可以用来指定一个逻辑状态,可提供两个值的选择一“真”或“假”。复选框被选中时在方框内显示一个“√”,否则方框内为空。但有时问题不能简单地分为“真”或“假”,如不确定,可以用 NULL 来表示,此时复选框变为灰色。其常用属性如表 7-17 所示。

表 7-17 复选框常用属性 属性 说明Caption 指定在复选框右边的显示文字Value 指定复选框的当前状态Controlsource 指定与复选框建立连接的数据源

Page 51: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.6复选框表 7-18 复选框 Value 属性的设置值

属性值 说明0 或 .F. 复选框未选中,默认值l 或 .T. 复选框被选中2 或 .Null . 不确定,只在代码中有效由于复选框 Value 属性取值范围的特点,用 Controlsource 属性和复选框建立连接的数据源类型只能是逻辑型或数字型。在表单运行中如果改变了复选框的状态,系统会自动把和复选框建立连接的数据源的值进行更新。

【例 7-10】在表单上有一个文本框和三个复选框。当单击某个复选框时,文本框中的文字会随之变化,如图7-36 所示。

图 7-36 复选框的使用

Page 52: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.6复选框 操作步骤: ( 1 )选择控件。 本例中使用文本框控件和复选框控件,如图 7-36 所示。 ( 2 )属性设置。 文本框的 Value 属性设为“欢迎使用 VFP” 。 复选框 1 的 Caption 属性设为“粗体”。 复选框 2 的 Caption 属性设为“斜体”。 复选框 3 的 Caption 属性设为“下划线”。 ( 3 )编写代码。 双击复选框 1 ,打开代码窗口,在 Click 事件中输入如下代码: IF this.value=1 then thisform.Text1.fontBold=.T. ELSE thisform.Text1.fontBold=.F. Endif

Page 53: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.6复选框 双击复选框2,打开代码窗口,在 Click 事件中输入如下代码: IF this.value=1 then thisform.Text1.fontItalic=.T. ELSE thisform.Text1.fontItalic=.F. Endif 双击复选框3,打开代码窗口,在 Click 事件中输入如下代码: IF this.value=1 then thisform.Text1.fontUnderline=.T. ELSE thisform.Text1.fontUnderline=.F. Endif 程序运行效果如图7-37 所示:

图 7-37 文字倾斜、加下划线

Page 54: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.7 选项按钮组 选项按钮组是包含多个选项按钮的容器对象,通常用于多项值只能选取其中之一的情形。它将预定义的选项组提供给用户,供用户选择,允许用户从一组指定的操作选项中选择一个,这在表单的设计中经常用到。例如,可以使用选项按钮组来指定将输出的方式。 ( 1 )选项按钮及选项按钮组的常用属性 常用属性如表 7-19 所示。

表 7-19 选项按钮及选项按钮组常用属性 常用属性 说明Buttoncount 设置选项按钮组中的选项按钮个数Buttons 用来确定选项按钮组中的第几个选项按钮Controlsource 根据是否选中按钮来确定值,并将值写入字段中Value 确定已经被选中的按钮是按钮组中的哪一个按钮

Page 55: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.7 选项按钮组 ( 2 )选项按钮及选项按钮组的常用事件 选项按钮及选项按钮组的最常用事件就是 Click 事件,当用户单击选项按钮及选项按钮组时,就触发该事件。 在选项按钮组中选择单个选项按钮的方法同命令按钮组,也是在快捷菜单中选择“编辑”命令,进行选项按钮组的编辑状态。 【例 7-11】设计一个表单,该表单上由一个文本框和一个选项按钮组

Optiongroupl ,共有 3 个选项按钮,分别代表文本框中文字的三种可选大小,其界面如图 7-38 所示。

图 7-38 选项按钮组

Page 56: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.7 选项按钮组 操作步骤: ( 1 )选择控件 本例中使用一个选项按钮组、一个文本框控件、一个标签控件。设置选项按钮组的

Buttoncount 属性,设置选项按钮的个数为 3 ,将选项按钮横向排列;标签 Labell 用来显示选择结果,当在选项按钮中选中某个按钮时,就显示相应的结果。 ( 2 )属性设置 文本框的 Value 属性设为“欢迎使用 VFP” 。 Optiongroupl 的 Buttoncount 属性设为 3 。 ( 3 )编写选项按钮组的 Click 事件,代码为: IF This.Value=1 then Thisform.Text1.FontSize=8 Thisform.label1.Caption=" 现在的字体大小为 8" ELSE IF This.Value=2 then Thisform.Text1.FontSize=18 Thisform.label1.Caption=" 现在的字体大小为 18" ELSE Thisform.Text1.FontSize=28 Thisform.label1.Caption=" 现在的字体大小为 28" ENDIF ENDIF Thisform.Refresh

Page 57: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.8 列表框 列表框用于显示一系列的数据项,用户可以从中选择一项或多项。列表框和组合框类似,不同的是组合框初始时只显示一个数据项,而列表框显示多个数据项;在列表框中可以选择多个数据项,而在组合框中只能选择一个数据项。另外,列表框不允许用户输入新的数据项。 列表框的常用属性、事件和方法如表 7-20 和表 7-21 所示。

表 7-20 列表框的常用属性 常用属性 说明Name 指定列表框的名称Value 指定列表框当前的状态Colunmcount 指定列表框数据显示的列数Controlsource 指定用户选择列表框中数据后储存的数据去向,如表字段等Rowsource 指定列表框数据的来源Rowsourcetype 指定列表框属性 Rowsource 的类型

Page 58: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.8 列表框

【例 7-12】设计一表单,可以通过一文本框对列表框进行项目的添加、删除操作,其界面如图 7-40 所示。

表 7-21 列表框的事件和方法

图 7-40 表单界面设计

事件和方法 说明Clear 方法 删除列表框中所有数据Click 事件 单击列表框,触发该事件Additem 方法 在列表框中添加一项数据Removeitem 方法 在列表框中删除一项数据Intemctivechange 事件 当更改列表框的值时,触发该事件

Page 59: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.8 列表框 ( 1 )选择控件 在表单上添加一个列表框控件 Listl ,一个文本框控件 Text1 和两个按钮控件

command1 、 command2 。 ( 2 )属性设置 Forml 的 Caption 属性设为“课程管理”。 Command1 的 Caption 属性设为“添加”。 Command1 的 Caption 属性设为“删除”。 ( 3 )编写代码 窗体 Forml 的 Init代码如下: thisform.list1.AddItem (" 计算机文化基础 ") thisform.list1.AddItem ("大学英语 ") thisform.list1.AddItem ("高等数学 ") 按钮 Command1 的 Click代码如下: kecheng=thisform.text1.Value thisform.list1.additem (kecheng) thisform.text1.Value="" 按钮 Command2 的 Click代码如下: thisform.list1.RemoveItem(thisform.list1.ListIndex )

Page 60: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.9 组合框 组合框兼有列表框和文本框的功能,可以利用组合框,通过选择数据项的方式快捷、准确地进行数据的输入。组合框有两种变现形式,一种是下拉列表框,另一种是下拉组合框,通过设置属性 Style 值来实现。利用下拉组合框可以通过键盘输入内容,而在下拉列表框中只能选择表中的值,无法进行输入。下面介绍组合框的主要属性、方法和事件。 ( 1 )组合框的常用属性 其常用属性如表 7-22 所示。 通过设置 Rowsource 属性和 Rowsourcetype 属性,可以用不同的数据源中的项来填充列表框。 Rowsourcetype 属性决定列表框或组合框的数据源类型,如数组或表,具体设置值如表 7-23 所示,设置好

Rowsourcetype 属性后,设置 Rowsource 属性可指定列表项的数据源。

Page 61: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.9 组合框属性 说明Name 指定组合框的名称Value 指定组合框当前的状态Controlsourc

e指定用户选择组合框中数据后储存的数据去向,如表字段等

Listcount 指定组合框中列表项的个数Rowsource 指定组合框数据的来源Rowsourcety

pe指定组合框属性 Rowsource 的类型

Style 指定组合框是下拉列表框还是下拉组合框Visible 指定组合框可见还是隐藏

表 7-22 组合框的常用属性 Rowsourcet

yp列表项的数据源

0 无,由程序向列表项中添加项1 值,通过 Rowsource 属性手工指定多个要在列表项中显示的值2 表的别名,可以在列表中添加打开表的一个或多个字段的值3 SQL 语句,将 SQL SELECT 查询语句的执行结果作为填充列表框4 查询,用查询的结果填充列表框 ( 查询是在查询设计器中设计的 )

5 数组,用数组中的项填充列表框6 字段,指定一个字段或用逗号分隔的一系列字段值填充列表7 文件,用当前目录下的文件来填充列表8 结构,用 Rowsource 属性中指定的表结构中的字段名来填充列表9 弹出式菜单,用先前定义的弹出式菜单来填充列表

表 7-23 Rowsourcetype 属性的设置值

Page 62: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.9 组合框 ( 2 )组合框的常用事件和方法 其常用的事件和方法如表

7-24 所示。 表 7-24 组合框的事件和方法

事件名和方法名 说明Clear 方法 删除组合框中所有数据Click 事件 单击组合框,触发该事件Additem 方法 在组合框中添加一项数据Removeitem 方法 在组合框中删除一项数据Interactivechange事件 当更改组合框的值时,触发该事件

【例 7-13】显示指定学生的所有信息。表单界面如图 7-42 所示,要求:在组合框中选择学生姓名后,在表单右边显示对应学生的所有信息 , 其界面如图 7-43 所示。 图 7-42 表单界面设计

Page 63: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.9 组合框 ( 1 )选择控件 本例中在表单上添加一个组合框控件 Combol ,其他控件通过数据环境添加。 把学生表添加到表单的数据环境中,然后选中数据环境中表的字段并拖到表单上,系统自动创建标签、复选框、文本框和编辑框控件,可在标签、复选框、文本框、编辑框中显示选中学生的有关内容。 ( 2 )属性设置 Forml 的 Caption 属性设为“学生基本信息查询”。 Combol 的 Style 属性设为 0 。 Combol 的 Rowsourcetype 属性设为 6 , Rowsource 属性设为

student.姓名。 ( 3 )编写代码 组合框 Combol 的 Interactivechange代码如下: Thisform . Refresh

Page 64: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.10 计时器 计时器控件允许以一定的时间间隔重复地执行某种操作。它通过检查系统时钟,确定是否到了该执行某一任务的时间。注意:在表单设计时,计时器在表单中是可见的,但运行时,计时器是不可见的,因而它的位置和大小都是无关紧要的。其常用属性和事件如表 7-25 所示。

表 7-25 计时器的常用属性和事件 属性或事件 说明Enabled 属性 指定计时器是否开始工作Interval 属性 指定两个 Timer 事件之间时间间隔的毫秒数Timer 事件 当经过 Interval 属性所指定的毫秒数后触发该事件

【例 7-14】设计一个显示当前系统时间的表单。 ( 1 )选择控件 本例中使用标签、文本框和计时器控件。标签控件提示文本框的显示内容,文本框显示当前系统时间,计时器实现系统时间的设置。其界面如图 7-44所示。

Page 65: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.10 计时器

( 2 )属性设置 Forml 的 Caption 属性设为“时钟”。 Label1 的 Caption 属性设为“现在系统时间为”。 Timerl 的 Interval 属性设为“ 1000” 。 表单运行时文本框显示系统时间,每秒刷新一次文本框的值,所以要设置计时器的时间间隔属性为 1000 。 ( 3 )编写代码 计时器的 Timer 事件的代码为: Thisform.Text1.Value=Time() Thisform.Refresh

图 7-44 显示当前系统时间

Page 66: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.11 表格 表格控件又称为网格控件 (Grid) ,它包含了多个列 (Column) ,每列又包含了一个表头 (Header) 和文本框

(Textbox) ,表头用来显示字段的标题,文本框用来显示字段的内容。每一列还拥有自己的一组属性、事件和方法。利用表格控件,可以在表单或者页面中显示和操作数据表的内容。下面来介绍它的主要属性、事件和方法。 ( 1 )表格的常用属性 常用属性如表 7-26 所示。 ( 2 )列的常用属性如表 7-28 所示。

属性 说明Allowaddnew 指明是否可以在表格控件工具栏中添加记录Caption 用来指明表格控件中列的标题名称Columncount 用于设置表格控件的列数Columns 用来指明表格控件中第几列Deletemark 设置表格控件中是否要显示删除标志栏,用来指明记录是否已被删除Enabled 用来设置表格是否可用Name 用来设置表格的名称Recordsource 设置表格控件的数据来源Recordsouretype 设置表格控件中显示数据的类型Readonly 指明表格控件所连接的数据表是否允许被更改

表 7-26 表格的常用属性

表 7-28 列的常用属性 属性值 说明Controlsourc

e在列中要连接的数据来源,通常为表中的一个字段

Page 67: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.11 表格 【例 7-15】设计一个显示指定学生信息的表单,表单中有一个文本框 Textl 和一个表格控件 Gridl 。当在文本框中输入学号后,如果该学生存在,则表格就显示该生的情况:如果不存在,则显示相应的提示信息。其界面如图 7-45 所示。 ( 1 )选择控件 本例中使用标签、文本框、表格控件、按钮,标签用来说明文本框的作用,表格用来显示查询到的学生的详细信息。在表单上添加了表格控件之后,在其上点右键打开快捷菜单,选择“生成器”,打开表格生成器后,向表格添加需要显示的字段:学号、姓名、系科、

是否统招、总分。

图 7-45 显示指定学生信息

Page 68: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.11 表格 ( 2 )属性设置 按钮 Command1 的 Caption 属性设为“查询”。 标签 Ladel1 的 Caption 属性设为“输入要查询学生学号” Grid 的 Recordsourcetype 属性设为 0- 表 ( 注:如果学生. dbf添加到数据环境中,则选: 1- 别名 ) ;

Recordsource 属性设为学生。 ( 3 )编写代码 表格控件的数据源连接到 student.dbf ,表单运行时将显示 student.dbf 中的所有数据,而题目要求只显示指定学号的学生记录,考虑将所有的记录先删除,当在 Textl 中输入指定学号时,只恢复指定学号的记录。所以,在表单初始化时要先设置 Set Delete On ,忽略所有做过删除标记的记录;在文本框中输入条件后,恢复指定学号的记录,选择文本框 Textl 的 valid 事件来实现功能。代码如下:

Page 69: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.3.11 表格 表单 Forml 的 Init 事件代码: Set Delete On &&忽略所有做过删除标记的记录 Use student.dbf Delete all 按钮 Command1 的 Click 事件代码: IF EMPTY(Thisform.Text1.value) RETURN .F. Else Recall All &&恢复所有学生记录,以便查询重新输入的查询条件 Locate For Alltrim(学号 )=Alltrim(Thisform.Text1.Value) &&查找指定学号的记录 If Found() Delete All Recall For Alltrim(学号 )=Alltrim(Thisform.Text1.Value) && 如果找到指定学号的学生,删除所有学生记录,只恢复指定学号的记录 Else Delete All Messagebox("查无此人 !",0,"提示信息 ") && 如果没找到指定学号的学生,删除所有学生记录,显示提示信息 "查无此人 !" Endif RETURN .T. Endif Thisform.Refresh

Page 70: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.4 综合应用 通过前面的学习,我们已经介绍了常用控件的属性、方法和事件,掌握了关于表单的设计方法和技巧。下面我们将通过部分实例,进一步的说明表单程序设计的方法和步骤,实现表单程序的综合应用。 【例 7-16】任意输入两个 1—100 之间的整数数字,求两个数之间所有数字的累加和,设计界面如图 7-46 所示。

图 7-46 累加运算

Page 71: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.4 综合应用 在“计算”按钮的 Click 事件里编写代码如下: sum=0 x=VAL(thisform.text1.Value) y=VAL(thisform.text2.Value) FOR i=x to y sum=sum+i ENDFOR thisform.text3.Value=sum thisform.refresh 程序运行结果如图 7-47 所示。

图 7-47 运行效果

Page 72: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.4 综合应用 【例 7-17】设计一表单,界面如

图 7-48 所示,能够使标签在表单中自动的移动,并且在碰到表单的左右边界之后,向相反方向继续运动,直到表单结束运行。图 7-48 左右移动的标签

( 1 )属性设置 将标签 Label1 的 Caption 属性设为“移动的标签”。 将标签 Label1 的 Borderstyle 属性设为 1 。 将计时器 Timer1 的 Interval 属性设为 20 ( 2 )在表单 form1 的 Init 事件中编写代码如下: PUBLIC s s=5 在计时器 Timer1 的 Timer 事件中编写代码如下: thisform.label1.Left=thisform.label1.Left+s IF thisform.label1.Left+thisform.label1.Width >=thisform.Width s=-s ENDIF IF thisform.label1.Left<=0 s=-s endif

Page 73: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.4 综合应用【例 7-18】制作学生成绩管理系统登录表单如图 7-49 所示,要求在正确的登录操作后能够进入“顶层表单”,以及在输入有误的情况下进行错误提示,并且在表单的左下脚位置显示系统日期和事件,运行结果如图 7-50 所示。

图 7-49 登录表单 图 7-50 运行结果

Page 74: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.4 综合应用 在“确定”按钮 Command1 的 Click 事件中编写代码如下: username=thisform.combo1.value pwd=alltrim(thisform.text1.value) locate for 用户=username if found() .and. 密码=pwd do form 顶层表单 .scx thisform.release else messagebox(" 操作员密码错! ") thisform.text1.setfocus endif 在“退出”按钮 Command2 的 Click 事件中编写代码如下: release thisform close all quit 在计时器 Timer1 的 Timer 事件中编写代码如下: thisform.label4.caption="日期: "+Alltrim(str(year(date())))

+" 年 "+Alltrim(str(month(date())))+" 月 "+Alltrim(str(day(date())))+" 日 "+chr(13)+"时间: "+time()

Page 75: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.4 综合应用 【例 7-19】设计一个 student 表的浏览表单,界面如图 7-51 所示,表单刚运行时,显示第一条记录,且“前一记录”和“首记录”两命令按钮呈灰色;当记录指针移到表头时,“前一记录”和“首记录”两命令按钮变灰色;当记录指针移到表尾时,“后一记录”和“末记录”两命令按钮变灰色;其他按钮则为正常状态。通过“添加”、“删除”按钮还可以实现表中记录的添加和删除操作,运行结果如图 7-52 所示。

图 7-51 程序界面 图 7-52 运行界面

Page 76: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.4 综合应用 在本例中, student 表中的各个字段是直接从数据环境中拖到表单上的,所以文本框以及复选框控件自动绑定数据源。 注意 与表有关的表单设计,可以通过数据环境来绑定数据源,而不必在属性窗口中逐个设置每个控件的数据源属性。 在表单 Form1 的 Init 事件中编写代码如下: thisform.command1.Enabled = .F. thisform.command2.Enabled = .F. 在“首记录”按钮 Command1 的 Click 事件中编写代码如下: go top thisform.command1.Enabled = .F. thisform.command2.Enabled = .F. thisform.command3.Enabled = .T. thisform.command4.Enabled = .T. thisform.Refresh

Page 77: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.4 综合应用 在“前一记录”按钮 Command2 的 Click 事件中编写代码如下: SKIP -1 IF BOF() thisform.command1.Enabled = .F. thisform.command2.Enabled = .F. ENDIF IF !EOF() thisform.command3.Enabled = .T. thisform.command4.Enabled = .T. ENDIF thisform.Refresh 在“后一记录”按钮 Command3 的 Click 事件中编写代码如下: SKIP IF EOF() SKIP -1 thisform.command3.Enabled = .F. thisform.command4.Enabled = .F. ENDIF IF !BOF() thisform.command1.Enabled = .T. thisform.command2.Enabled = .T. ENDIF thisform.Refresh

Page 78: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

7.4 综合应用 在“末记录”按钮 Command4 的 Click 事件中编写代码如下: go bottom thisform.command1.Enabled = .T. thisform.command2.Enabled = .T. thisform.command3.Enabled = .F. thisform.command4.Enabled = .F. thisform.Refresh 在“添加记录”按钮 Command5 的 Click 事件中编写代码如下: APPEND BLANK thisform.Refresh 在“删除记录”按钮 Command6 的 Click 事件中编写代码如下: DELETE PACK Thisform.Refresh

Page 79: 第七章  表单设计与应用

http://Vir.jxstnu.edu.cn/vfp Visual FoxPro 程序设计

本章小结 表单是用户与 Visual Fox Pro 应用程序之间进行数据交换的界面,是最为常用的数据显示及编辑方式。它可以包含各种不同的控件,用户可以通过面向对象的、可视化的程序设计方法利用这些控件制作不同的按钮、下拉框、选项框等,使用户能利用友好、美观的人机交互界面进行数据的接收、显示、和编辑,实现与应用程序的连接。

Page 80: 第七章  表单设计与应用

VFP 课程建设组