nullnull第 六 章
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
单及其控件的创建与使用null第一节 表单概述null 表单类似于Windows中的各种标准窗口与对话框,是VFP中最常用的界面,即利用表单作为用户和VFP应用程序之间交互数据的窗口。用户可以利用表单接收、查看和编辑数据。
表单是一种容器类,包含多个控件类对象,用于处理各种数据,或响应用户/系统事件,以完成信息的处理。利用表单可以很好地对数据进行直观、快速、方便的操作。设计表单的过程就是设计应用程序界面的过程。null 表单设计时,一般应考虑以下原则:
▲从用户的角度设计表单;
▲表单的外观、操作应与Windows中常见的窗口 和对话框尽可能地一致;
▲根据任务的不同,设计不同的表单及表单中的控件,以便用户使用;
▲应用程序中的表单界面保持一致;
▲根据表单中控件的数量、所表达的数据性质等,设计表单中控件的布局或表单所包含的页面数;
▲对用户操作表单不要有过多的限制,应允许用户做一些错误的操作,并能作出相应的处理,即具有一定的容错能力。null 表单可以通过可视化界面操作创建,也可以通过编程的方法创建。其中通过可视化的界面操作创建表单主要有以下两种方法:
▲利用表单向导创建表单
▲利用表单设计器创建表单null第二节
使用向导创建表单null一、利用向导创建基于一个表(视图)的表单
利用表单向导可以方便地创建基于一张表(或视图)的表单,表单向导将根据用户对一系列问题的回答自动生成一个表单。
表单向导的启动,可以是:
▲菜单命令
▲“新建”工具按钮
▲项目管理器 (文档选项卡) null “表单向导”启动后:
步骤一:选取表单基于的数据表及所需字段
步骤二:选择表单样式及按钮类型
表单样式可以是:标准式、凹陷式、阴影式、边框式;
按钮类型可以是:文本按钮、图片按钮、无按钮、自定义;
步骤三:选择排序字段
步骤四:设置表单标题、选择“预览”运行表单、保存表单null 表单保存后,磁盘上将产生两个文件:表单文件.scx和表单备注文件.sct。
用表单向导创建的表单中含有一个命令按钮组(是由系统提供的一组标准的命令按钮,且是动态的),用以在表单中显示不同的记录、编辑记录及查找记录等操作。
如果是通过项目管理器启动的向导,则创建的表单将自动包含在项目中。
利用向导创建的表单在保存后无法用向导修改,但可以在表单设计器中打开并修改它。
运行表单的方法有:
▲在项目管理器窗口中(表单在项目中)
▲“运行”按钮
▲ DO FORM命令。null2、利用向导创建一对多表单
一对多表单向导可以创建一个基于两个相关表(视图)中数据的表单。在一对多表单中,显示父表数据的同时以表格控件显示相关的子表数据。
步骤一:选择父表并选择所需字段
步骤二:选择子表并选择所需字段
步骤三:设置父表与子表之间的关联条件(如果两表之间存在永久关系,则将其永久关系作为默认的关联条件,否则系统找同名或“相近”字段。)
步骤四:选择表单样式及按钮类型
步骤五:选取排序字段
步骤六:设置表单标题、选择“预览”运行表单、保存表单null 对于一对多表单,由于父表的每个记录对应于子表中的多个记录,所以表单运行时,父表在表单中每次显示一个记录的数据,子表的相关数据在表单中利用表格控件以浏览窗口的形式显示。
在一对多表单中,用于记录定位的按钮只对父表产生控制,子表记录可通过子表窗口的窗口操作控制。
利用表单向导创建表单是一种快速、简捷的方法,但生成的表单其外观、形式、功能基本是固定的,且较为简单,通常不能满足需要。null第三节
表单设计器null一、表单设计器概述
启动表单设计器的方法是:
▲在项目管理器中
▲利用工具按钮
▲菜单命令
▲窗口命令
CREATE FORM 表单文件名
MODIFY FORM 表单文件名
表单设计器打开后,将显示表单菜单、表单控件工具栏、表单设计器工具栏、布局工具栏和属性窗口等。null 表单设计器打开后,将显示表单菜单、表单控件工具栏、表单设计器工具栏、布局工具栏和属性窗口等。
表单设计器窗口中包含单个表单(默认)或多个表单,可在其上添加和修改控件。null1、表单设计环境的设置
可以在“选项”对话框中的“表单”和“控件”选项卡中设置表单设计器的工作环境。包括:
▲最大分辨率
▲Tab键次序
▲度量单位
▲网格线
………null2、表单菜单
打开表单设计器后,系统将显示“表单”菜单,该菜单含创建、修改表单及表单集的命令,包括:
▲新建属性…
▲新建方法程序…
▲编辑属性/方法程序…
▲创建表单集
▲移除表单集
▲添加新表单
▲移除表单
▲快速表单…
………null3、表单设计器工具栏
在打开表单设计器后,系统自动打开“表单设计器”工具栏。此工具栏包括:
▲设置Tab键次序
▲数据环境
▲属性窗口
▲代码窗口
▲表单控件工具栏
▲调色板工具栏
▲布局工具栏
▲表单生成器
▲自动格式null4、表单控件工具栏
使用“表单控件”工具栏可以在表单上添加各种控件。此工具栏包括:
▲选定对象
▲查看类
▲标签
▲文本框
▲编辑框
▲命令按钮
▲命令按钮组
▲选项按钮组
▲复选框
……null5、布局工具栏
该工具栏用于在表单上对齐和调整控件的位置、大小及叠放层次。此工具栏包括:
▲左边对齐
▲右边对齐
▲顶边对齐
▲底边对齐
▲垂直居中对齐
▲水平居中对齐
▲相同宽度
▲相同高度
……
当未选或仅选一个控件时所有或部分按钮不可用。null6、调色板工具栏
使用“调色板工具栏”可以设定表单或表单上控件的颜色。此工具栏包括:
▲前景色
▲背景色
▲颜色板
▲其它颜色null7、属性窗口
一个表单是由多个控件组成的窗口,表单及其控件均为“对象”。每个对象都有其各自的属性、事件和方法。
不同类型的控件所具有的属性、事件和方法有些是相同的,有些是不同的。
利用向导、生成器创建的表单及其控件,系统自动为其设置了相应的属性、事件和方法代码。直接利用控件工具栏向表单中添加的控件,用户必须为其设置一些属性以及事件和方法代码,以实现所需的功能。
控件的属性、事件和方法的设置可以在属性窗口中进行。null 属性窗口包含选定的表单、数据环境或控件的属性、事件和方法列表,可在设计或编程时对这些属性值进行设置或更改。
▲对象下拉列表框
▲“全部”选项卡
▲“数据”选项卡
▲“方法程序”选项卡
▲“布局”选项卡
▲“其他”选项卡
▲“属性”设置框
▲“属性”列表
▲“
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
”按钮null(1)对象下拉列表框
显示表单(或表单集)中所有对象的名称,而且是采用分层方式显示,体现了VFP中对象之间的包含关系,即父子关系。
对象的名称由对象的Name属性给定。
(2)属性、事件和方法选项卡
属性窗口中含有5个选项卡,即:“全部”、“数据”、“方法程序”、“布局”和“其他”选项卡,用于分类显示属性、事件和方法。null(3)属性列表
该列表显示所有可在设计时更改的属性名称和它们的当前值。
▲具有预定值的属性,双击属性名可遍历所有可选项;
▲具有两个预定值的属性,双击属性名可在两者之间切换;
▲只读的属性、事件和方法以斜体显示其值;
▲在属性列表中选择某一属性、事件、方法后,在属性窗口的底部会显示其说明信息。
打开属性窗口会显示选定对象的属性或事件;要编辑另一个对象的属性或事件,可以从“对象下拉列表框” 中选择这个对象,或直接从表单中选择这个对象。null(4)属性设置框
可以在属性设置框中直接输入属性内容或从下拉组合框中选择所需内容。
▲用户修改了某属性、事件或方法后,其值(或事件、方法名称)以粗体显示;
▲属性值为字符常量时,不必使用定界符;
▲属性值为一个函数或表达式时,必须以等号(=)作为开头;
▲要将属性、事件、方法的修改还原为默认设置,可右击鼠标,从快捷菜单中选择“重置为默认值”;
▲事件与方法的设置是编写相应的处理过程,即编写程序代码。null8、新建属性和方法
利用系统菜单的“表单/新建属性”或“表单/新建方法”,可以为表单集或不属于表单集的表单创建任意多个新的属性或方法。新建的属性和方法的作用域是表单,可以如同引用其它属性或方法程序那样引用它们。
(1)新建属性
在表单设计器环境下,如果要向表单(表单集)中添加新属性,可以由表单 / 新建属性菜单命令来实现。null 在“新建属性”对话框中,需要输入新属性的名称、说明信息,单击“添加”按钮后,系统就自动地把新属性添加到属性窗口中。
新建属性的默认属性值为逻辑值 .F. ,但属性值可以是任何一种的数据类型。null 在“新建属性”对话框中,可以为该新建的属性创建一个Access方法程序或Assign方法程序。
▲Access方法程序
是指在查询属性时执行的代码。查询的方式一般是使用对象引用中的属性,将属性值存储到变量中,或用问号(?)命令显示属性值。
▲Assign方法程序
是指当更改属性值时执行的代码。更改属性值一般是使用“STORE”或“=”命令为属性赋新值。
说明:
只有在运行时刻查询或更改属性值时才执行Access和Assign方法程序,在设计时刻查询或更改属性值时不会执行Access和Assign方法程序的。null 创建的新属性可以是一个数组属性,在使用时可利用数组命令或函数处理它。在创建数组属性时,在新属性的名称中应包含数组的维数和大小,如:ABC [ 4 , 7 ]。
如果表单中添加的新属性为数组属性,则该属性在属性窗口中是只读的,但可以在运行时管理和使用数组。null(2)新建方法程序
在表单设计器环境下,如果要向表单(表单集)中添加新方法,同样也可以由表单 / 新建方法程序菜单命令来实现。null 在“新建方法程序”对话框中,需要输入新方法程序的名称、说明信息,单击“添加”按钮后,新方法程序就自动地添加到属性窗口中。系统提示该新方法程序为“默认过程”。在属性窗口中双击该方法,则系统打开其方法程序代码的编辑窗口。调用自定义方法程序与调用基类的方法程序相同。null(3)编辑新建的属性和方法程序
对表单中添加的新属性和新方法程序可以进行编辑。编辑操作包括移去新的方法或修改其说明等。
如果要编辑自定义属性或方法程序(包括:更名、修改说明信息等),可以选择“表单”菜单中的“编辑属性 / 方法程序”实现。null2、事件和方法的代码设置
表单(集)及其所包含的所有对象都有与之相关的事件和方法程序。
事件既可以是用户的行为(如Click事件),也可以是系统的行为(如Timer事件)。
方法是和对象相联系的过程,只能通过程序以特定方式激活(如表单或表单集的Release方法和对象的Refresh方法)。
当触发事件时,系统将运行其事件代码程序(如果没有相应的事件代码,则不进行任何操作),而在该事件代码中又可以调用(激活)某个方法程序。null 编辑事件处理程序代码或方法程序代码,可用以下方式实现:
▲显示 / 代码 菜单
▲表单设计器的“代码窗口”工具按钮
▲双击对象
▲双击属性窗口中相应的事件或方法 代码窗口打开后,从对象列表框中选择对象;从过程列表框中选择事件或方法;在编辑窗口中编辑代码。
在编辑事件或方法程序代码时。首先要选择对象。null 事件处理代码和方法程序代码的设计是根据任务的需求进行的。在程序代码中,往往需要对表单及表单上的控件进行操作(如设置属性、调用方法等),即在运行时设置属性和调用方法。null(1)引用对象
在引用对象时,必须指明对象与容器层次的关系,犹如在文件操作时,必须指出文件所在的磁盘和文件夹。引用对象就是提供对象的地址。
对象引用分为绝对引用和相对引用两种,引用时,各个对象之间以及对象和属性之间必须用“ . ”进行分隔。
▲绝对引用
绝对引用是指从容器的最高层次(表单或表单集)引用对象,给出了对象的绝对地址。
在容器层次的最高级(表单或表单集)需要引用对象变量,默认情况下,对象变量和表单(或表单集)的文件名相同。(注意教材P153叙述)nullMySys.Form1.Text1
MySys.Form1.PageFrame1.Page1.CommandGroup1.Command2注:
此表单集保存在一个名为:MySys的表单文件中。null▲相对引用
相对引用是指在容器层次中相对于某个容器层次的引用。相对引用通过一些关键字指明所要处理的对象。
相对引用通常应用于某个对象的事件处理代码或方法程序代码中,即在某个容器对象的事件处理代码或方法程序中对所包容的对象的引用,引用时可以直接使用其对象名。nullVFP提供了若干个关键字来进行相对引用:注:This、ThisForm、ThisFormSet仅在方法程序或事件处理代码中使用。null若当前对象为Page1,则以下均为对Option1的引用:
This.Parent.Parent.OptionGroup1. Option1
ThisForm .OptionGroup1. Option1null VFP的系统变量_SCREEN表示屏幕对象,它把Visual FoxPro的主窗口作为一个对象来处理。 _SCREEN与ActiveForm等组合可以在不知道表单名的情况下处理活动表单,例:
_SCREEN.ActiveForm
_SCREEN.ActiveForm.ActiveControl null(2)设置对象的属性
每个对象都有许多属性。通过对对象属性的设置,可以定义对象的特征或某一方面的行为。对象的大多数属性既可以在设计阶段设置,也可以在运行阶段设置,但也有一些属性是只读的。设置对象的属性的基本方法是:
▲打开表单设计器后,在属性窗口中对对象属性进行设置。
▲在程序代码中,用以下语法设置对象的属性: 引用对象 . 属性 = 值
例:
ThisForm.Command1.Enabled = ;
NOT ThisForm.Command1.Enablednull 在属性设置中,对象的引用可以采用绝对引用或相对引用。
例:
MyFormSet.Form1.Text1.FontName = "宋体"
MyForm.Text1.ForeColor = RGB ( 0 , 0 , 255 )
This.FontSize = 9
ThisForm.Command1.Caption = "确认"
This.Parent.Parent.Text1.Enabled = .F.
注:
MyFormSet和MyForm均为表单文件名。null 对同一个对象多个属性的设置可以由下列语句进行设置:
WITH 引用对象
. 属性 = 值
……
ENDWITH
例:WITH ThisForm.Command1
.FontName = "宋体"
.FontSize = 9
.Caption = "确认"
.ForeColor = RGB( 0 , 0 , 255)
ENDWITHnull 也可以调用SetAll方法为容器对象中的所有控件或某类控件指定一个属性设置。
语法:
Container.SetAll ( 属性 , 值 [ , 类名 ] )
说明:
▲属性 指定要设置的属性名
▲值 指定属性的值,其数据类型取决于要设置的属性
▲类名 指定设置属性的类名,缺省时指容器中的所有控件
例:
ThisForm.SetAll( " ForeColor " , RGB( 255 , 0 , 0 ) )
ThisForm.SetAll( " FontSize " , 16 , " TextBox " )null(3)调用对象的方法程序
对象创建后,可以在应用程序的任何地方调用该对象的方法程序,其语法是:
引用对象 .方法程序
例:
ThisForm.Refresh
ThisFormSet.Form1.Show
ThisForm.Text1.SetFocusnull 对于有返回值的方法程序,必须以圆括号结尾(类似于函数的调用)。例:
ThisForm.Caption = ThisForm.GetNewCaption( )即:将自定义的方法程序GetNewCaption的返回值作为表单的标题。
注:
如果有参数传递给方法程序,该参数也必须放在括号中。null三、表单的数据环境
表单(集)的数据环境包括了与表单交互作用的表和视图,以及表单要求的表之间的关系。VFP引入数据环境目的在于:
▲打开或运行表单时,数据环境中的表和视图将自动被打开;关闭或释放表单时将自动关闭这些表和视图。
▲在属性窗口中设置一些对象的ControlSource属性(控件的数据源)时,设置框与数据环境中所有字段相连。
创建表单时,首先要设置表单的数据环境,以确定表单所用到的表和视图。null1、数据环境的设置
利用数据环境设计器可以可视化地创建和修改表单的数据环境。打开数据环境设计器的方法有:
▲在打开表单设计器后,从“显示”菜单中选择“数据环境”选项
▲从表单的快捷菜单中选择“数据环境”选项
▲从“表单设计器”工具栏中选择“数据环境”按钮
当数据环境设计器窗口活动时,VFP显示用以处理数据环境对象的数据环境菜单、属性窗口和代码窗口。null(1)向数据环境中添加表或视图
向数据环境中添加表或视图可以是:
▲通过“数据环境”菜单或从快捷菜单中选择“添加”命令
▲从项目管理器中直接将表或视图拖放到数据环境设计器中
在数据环境设计器中添加表或视图后,可以看到属于表或视图的字段和索引,以及多张表或视图之间的永久性关系。
向数据环境中添加一个表或视图的同时也创建了一个临时表(Cursor)对象。可以在属性窗口中设置临时表对象的属性。null(2)在数据环境中设置关系
如果添加中的表具有永久关系,这些关系将自动继承到数据环境中;如果表中没有永久关系,可以在数据环境设计器中设置这些关系。
在数据环境中设置关系与设置数据库中表的永久关系相同,只需将字段从主表拖动到相关表中的相匹配的索引标识或字段上。如果和主表中的字段对应的相关表中没有索引标识,系统将提示是否创建索引标识。
注意:
此时所建立的仅仅是临时关系,而不是永久关系。null 如果要编辑关系的属性,在属性窗口中的对象框中选择要编辑的关系。
RelationalExpr属性的默认设置为主表中主关键字段的名称。如果关系不是一对多关系,必须将OneToMany属性设置为F。null(3)从数据环境中移去表或视图
若要将表或视图从数据环境中移去,在选择要移去的表后,从“数据环境”菜单中选择“移去”命令。
将表或视图从数据环境中移去时,与这张表或视图有关的所有关系也随之移去。null(4)数据环境中的对象
设置了数据环境后,系统将产生与数据环境相关的对象,且所有对象均有相关的属性、事件和方法。
数据环境中的对象主要有以下几类:
▲DataEnvironment(数据环境)
▲Cursor(临时表)
▲Relation(表之间的关系)null有关数据环境的总结:
▲数据环境是包含了表单、表单集和报表所需的表、视图和表之间的临时关系的容器。通过设置数据环境以及包含在数据环境中临时表和关系的属性,可以决定是否在表单运行时自动打开表或视图以及创建临时关系,在释放表单时是否关闭表。使用数据环境可以简化程序的设计。
▲数据环境设计器是数据环境的可视化设计工具。
▲数据环境对象是随表单、表单集对象创建时或运行报表时创建的一种特殊对象,它包含临时表对象和关系对象,可以在数据环境设计器中设置它们的属性和事件代码。null2、控件与数据的关系
根据控件与数据的关系,控件可分为两大类:
▲数据绑定型控件
可以与表、视图或查询、内存变量等数据源中的数据绑定的控件称为数据绑定型控件。
在数据绑定型控件中输入的值将保存在数据源中。数据源可以是表的字段、临时表的字段或变量。数据源中值的改变,也将改变控件的值。
数据绑定型控件常用于输入、显示、修改数据等。主要有:复选框、列表框、组合框、编辑框、选项按钮、选项按钮组、微调框、表格和表格的列等。null 控件与数据绑定后,控件值便与数据源的数据保持一致。即:控件若与字段绑定后,控件的值将由字段的值决定;而字段的值也将随控件值的改变而改变。
控件数据源通常由ControlSource属性指定;表格的数据源由RecordSource和RecordSourceType属性指定;而组合框和列表框则由RowSource和RowSourceType属性指定其数据源。
如果没有设置控件的这些属性,在控件中输入或修改的值只作为Value属性值设置保存,在控件对象释放后,这个值既不保存在外存储器中,也不保存在内存变量中。 【数据源和Value】null▲非数据绑定型控件
不可以与数据绑定的控件称为非数据绑定型控件。
非数据绑定型控件主要有:标签、线条、命令按钮等。
注意教材P179的叙述。null四、使用表单设计器修改表单
利用表单设计器可以对已建立的表单文件进行可视化的修改。修改表单包括:修改表单的布局、添加或删除表单中的控件、修改表单及表单中各个控件的属性、方法和事件处理代码等。
1、修改表单布局
利用表单设计器修改一个已经创建的表单,可以用以下方法打开表单设计器:
▲“打开”菜单或工具按钮
▲在项目管理器窗口中
▲命令窗口
MODIFY FORM 表单文件名null 表单中的对象对于表单来说都是一个表单上的控件。对控件的操作包括:
▲选择控件
☆单击控件或Shift+单击控件。
☆鼠标在表单上拖拉一个范围。
▲移动控件
选择控件后,用鼠标拖拉该控件。
▲缩放控件
鼠标拖拉控件的边框。null ▲复制控件
利用剪贴板可复制选择的控件。
▲删除控件
选择控件后按Del键。
▲添加控件
利用表单的控件工具栏。
▲控件对齐
选择控件后,利用布局工具栏。 null2、修改表单的外观
表单的外观主要指表单的样式、表单及其中控件的颜色,以及显示文本的字体、大小等。
(1)表单的样式
▲Caption属性
用于指定表单标题栏中显示的标题。
▲Icon属性
用于确定标题前面的表单控制菜单的图标。
▲MaxButton与MinButton属性
分别决定表单有无最大化和最小化按钮。
▲BorderStyle属性
决定表单边框样式。null▲AutoCenter属性
决定表单运行时是否自动居中。
▲TileBar属性
该属性有两个值:
☆ 0(关闭)
☆ 1(打开 默认值)
当此属性值为0时,表单无标题栏(包括:最大化、最小化、关闭按钮和控制菜单图标) 。
▲ControlBox属性
该属性为F时,表单无控制按钮(包括:最大化、最小化、关闭按钮和控制菜单图标,但菜单标题仍然存在)。null(2)颜色与背景
▲Picture属性
为表单指定一个背景图片。
▲ForeColor与BackColor属性
表单和许多控件都有此两个属性。这两个属性分别设置控件的前景色与背景色。
颜色的设置由RGB函数完成。null 在VFP中颜色的设置采用RGB模式,即用红、绿、蓝这3种颜色按不同强度相加时,可得到任何一种颜色。某一种颜色和这3种颜色之间的关系可用下面的式子来描述:
颜色 = r + g + b
(r、g、b分别是R、G、B这3种颜色的值,其取值范围为0 ~ 255)
当3种基本颜色等量相加时,得到白色;等量的绿蓝相加而红为0值时,得到青色;等量的蓝红相加而绿为0值时,得到品红色;等量的红绿相加而蓝为0值时,得到黄色。 null G + B = C(青) ●+●=●
B + R = M(品红) ●+●=●
R + G = Y(黄) ●+●=●
R + G + B = 白色 ●+●+●=○ null(3)改变文本的字体和大小
▲FontName属性
用于指定显示文本的字体名,其默认字体是宋体。
▲FontSize属性
用于指定对象文本的字体大小。其值以磅为单位,默认值为9磅。
▲FontBold属性 指定文本是否是粗体
▲FontItalic属性 指定文本是否是斜体
▲FontStrikeThru属性 指定文本是否带删除线
▲FontUnderline属性 指定文本是否带下划线 null(4)控件的可用和可见
▲Enabled属性
指定表单或控件是否可以响应用户引发的事件,默认值为T。当该属性为F时,表单或控件“不可用”,即不响应用户引发的事件。
对于非容器控件来说,当该属性为F时,可以由DisableForeColor和DisableBackColor属性设置其此时的前景色和背景色。
▲ReadOnly属性
指定表单运行时控件能否被用户编辑,其默认值为F。当控件的ReadOnly属性为T时,用户将不能编辑该对象,但该对象仍然可以响应用户引发的事件。null▲Visible属性
指定表单或控件在运行时是可见还是隐藏,默认值为T(可见)。当对象的该属性为F时,它不会响应用户引发的事件,但可以在代码中访问它。null3、控件生成器
系统提供的生成器有自动格式生成器和控件生成器。利用生成器可以简便、快速地为一些控件设置与格式、样式等相关的属性。
▲自动格式生成器
在表单中选择一个或多个控件后,可以由“表单设计器”工具栏上的“自动格式”按钮来打开自动格式生成器。
▲控件生成器
右击表单上的一个控件后,可从快捷菜单中选择“生成器”来打开控件生成器。null五、利用表单设计器创建表单
利用表单设计器可以可视化地创建表单。表单保存时将保存为扩展名为.scx的表单文件和扩展名为.sct的表单备注文件。
利用表单设计器创建一个表单,可以用以下方法之一打开表单设计器:
▲在项目管理器窗口中
▲利用菜单命令或工具按钮
▲命令窗口
CREATE FORM 表单文件名
VFP启动表单设计器后,自动创建一个新的空白表单。null1、利用表单生成器创建表单
在启动表单设计器后,可利用“表单”菜单的“快速表单”,或表单生成器工具按钮,或快捷菜单中的“生成器”选项打开表单生成器对话框,并通过添加控件或修改操作来定制表单。
▲“字段选取”选项卡
用于指定作为表单控件而添加的字段。
☆数据库和表 列出选定的数据库中的表、视图或自由表。
☆可用字段 列出所选定的表或视图中的所有字段。
☆选定字段 显示在表单中作为控件出现的字段。null▲ “样式”选项卡
为控件提供几种样式选项。
在表单生成器对话框中选择的样式并不影响表单中已存在的控件。
利用表单生成器,可以快捷地产生基于表或视图的字段控件,但不会在表单中生成用于记录定位等操作的按钮控件。null 利用表单向导和表单生成器创建的表单较为简单:
▲利用表单生成器创建的表单只能基于单表或视图的表单,而利用表单向导可以创建基于单表或基于具有一对多关系的表或视图的表单。
▲利用表单向导创建的表总是产生一组相对固定的记录定位等操作的按钮控件。
▲利用表单生成器,可以快捷地生成基于表或视图的字段控件,但不能直接生成用于记录定位等操作的命令按钮控件。
▲利用表单生成器中选择的样式并不影响表单中已存在的控件。null2、利用数据环境向表单中添加控件
可以直接从数据环境中将表、视图或它们的字段拖放到表单中,从而直接创建与字段、表或视图数据对应的控件,此时控件的类型由拖放到表单上的对象而定(详见教材第183页,若要改变控件的类型,可以表设计器中修改) 。
由此产生的新的控件的数据源、Name等属性由系统自动给定。
注:
控件的Name属性指定了在代码中引用该控件时所用的名称。null注:
▲所产生的控件的Name属性遵守以下规律:
Name属性 = 控件类型 + 字段名
▲所产生的标签的Caption属性及复选框的Caption属性即为字段名。null3、利用表单控件工具栏向表单中添加控件
在表单设计器中,可以通过在表单控件工具栏上选择控件来添加新的控件。其方法是:
步骤一:在工具栏中选择相应的控件后,在表单上做拖放操作,或在表单上单击要放置控件的位置。
步骤二:根据需要调整它们的大小。
利用表单控件工具栏在表单中添加的控件,用户必须在属性窗口中为这些控件设置有关的属性及事件处理代码等。null 为控件设置属性,通常是由用户在属性窗口中或利用编程的方法进行设置。
对于部分控件(与表中数据相关的控件,如文本框、列表框、表格等)可利用相应的生成器设置部分属性。
向表单中添加的控件如果其数据源是表或视图的字段,则可以利用表单生成器添加或直接从数据环境中将字段拖放到表单中。null4、表单的保存与运行
在运行表单之前,必须先保存表单(表单无浏览功能)。
(1)表单的保存
▲关闭表单设计器窗口(系统将提示是否保存)
▲文件 / 保存(或:另存为…)
▲运行表单(系统将提示是否保存)
表单保存时将保存为扩展名为.scx的表单文件和扩展名为.sct的表单备注文件。null(2)表单的运行
▲项目管理器窗口
▲工具按钮(表单设计器处于打开状态)
▲菜单命令 程序 / 运行
▲窗口命令
DO FORM 表单文件名 [ WITH 参数 ]
注意:表单文件及表单备注文件同时存在时方能运行表单。
如果从程序中运行表单,则必须在程序代码中包含DO FORM命令(语法格式详见教材P183)。null 在运行表单时,为设置属性值或者指定操作的默认值,有时需要将参数传递到表单。
▲将参数传递到在表单设计器中创建的表单
①创建容纳参数的表单属性
如创建表单的ItemName和ItemQuantity属性
②在表单的Init事件代码中,包含一个以下形式的PARAMETERS语句:
PARAMETERS cString , nNumber
③在表单的Init事件代码中,利用以下形式语句将参数分配给属性:
This . ItemName = cString
This . ItemQuantity = nNumbernull④运行表单时,在DO FORM命令中包括一个WITH子句:
DO FORM myForm WITH "Bagel" , 24
那么,即可在表单运行时,将参数"Bagel"和 24分别传递给表单的ItemName和ItemQuantity属性。null2、将参数传递到用程序创建的表单中
①在表单的Init事件代码中,包含一个以下形式的PARAMETERS语句:
PROCEDURE Init
PARAMETERS cString , nNumber
ENDPROC
②在CREATEOBJECT()函数中以下列形式包含参数:
FrmTest = ;
CREATEOBJECT( "myForm" , “Bagel" , 24 )null第 三 节
表单设计器(续)null六、用表单集扩展表单
表单集(FormSet)是一种容器类,由一个或多个相关表单组成。在表单设计器窗口中可以创建表单集,布置表单集中的各个表单。
使用表单集的优点是:
▲可以将表单集中的多个表单作为一组进行操作,可以同时显示或隐藏表单集中的多个表单;
▲能够可视化地排列多个表单,控制表单间的相对位置;
▲通过设置表单集的数据环境以控制各个表单间数据的同步处理。null 表单集的创建是在打开表单设计器窗口后,从“表单”菜单中进行。
创建了表单集,就可以向其中添加表单或移去表单;如果表单集中仅有一个表单,可以将表单集移去,从而得到一个独立的表单。
ThisFormSet提供了在程序代码中对对象所在表单集或表单集属性的引用,其格式为:
ThisFormSet.表单集属性名 / 对象名
表单集的FormCount属性中存放了表单集中的表单对象的数目,可利用这个属性循环遍历表单集中的所有表单,并执行某些操作。该属性是设计时不可用、运行时只读。null七、控制表单的行为
表单的外观和行为由其相应的属性决定,一旦修改了这些属性,将立即在表单上反映。(教材P185 ~ 186列出了定义表单外观和行为的常用属性)。▲ControlBox
用于指定在运行时是否在表单或工具栏的左上显示控件菜单框。默认值为:.T.null八、创建单文档与多文档界面
在VFP中允许创建两种类型的应用程序:单文档界面和多文档界面。
▲多文档界面
各个应用程序由单一的主窗口组成,且应用程序的窗口包含在主窗口中或浮动在主窗口的顶端。
VFP本身即为一个多文档界面的应用程序,在其主窗口中可包含命令窗口、编辑窗口、设计窗口等。null▲单文档界面
应用程序由一个或多个独立的窗口组成,这些窗口均在Windows的桌面上独立显示。
由单个窗口组成的应用程序通常是一个SDI应用程序,但也有一些应用程序综合了SDI和MDI的特性,如VFP将调试器显示为SDI应用程序,而其本身又包含了自己的MDI。null 为了支持这两种类型的文档界面,VFP把表单分为3种不同的类型:
▲子表单
☆包含在其它表单(父表单)中的表单,它不能移出父表单。
☆当子表单最小化时,出现在父表单的底部;
☆如果父表单最小化,则子表单也一起最小化;
☆子表单不出现在Windows任务栏中。null▲浮动表单
由子表单变化而来的表单,它与子表单一样可用于创建多文档界面但又不同于子表单。
☆浮动表单属于父表单的一部分,它可以不位于父表单中,即可在桌面上任意移动,但不能在父表单后台移动;
☆当浮动表单最小化时,它显示在桌面的底部;
☆当父表单最小化,浮动表单也一起最小化。null▲顶层表单
是独立的、无模式的、无父表单的表单。它通常用于创建单文档界面,或用作多文档界面中其它表单的父表单。
顶层表单与其它Windows应用程序同级,可出现在前台或后台,并且显示在Windows的任务栏中。【顶层表单】
注:
所谓的模式表单是指该表单在关闭前,其它表单不能成为活动表单。null 利用ShowWindows属性和Desktop属性可以将表单设置为顶层表单、浮动表单和子表单。
▲ShowWindows属性
☆0 —— 在屏幕中(默认值)
表单为子表单或浮动表单,且其父表单为VFP的主窗口。
☆1 —— 在顶层表单中
表单为子表单或浮动表单,且其父表单为活动的顶层表单
☆2 —— 作为顶层表单
表单是可以包含子表单的顶层表单。null▲ Desktop属性
指定表单是否放在VFP主窗口中:
.T. —— 表单可放在Windows桌面的任何位置
.F. —— 表单包含在VFP主窗口中(默认值)null 顶层表单、浮动表单和子表单的ShowWindows属性和Desktop属性值null九、容器对象的集合属性和计数属性
VFP中的所有容器对象都具有与之相关的计数属性和集合属性。
▲计数属性
是一个数值属性,它表明了所包含对象的数目。
▲集合属性
是一个数组,用以引用每个包含在其中的对象。
每个容器的集合属性和计数属性是按照容器所包含对象的类型来命名的。
null集合属性与计数属性null 这些属性允许使用循环、通过编程方式操作所有被包含的对象或某一特定的对象。例如设置表格的奇数列和偶数列的背景色分别为白色和蓝色,则可以在表格的Init事件中编写以下代码:
FOR i = 1 TO This.ColumnCount
IF i % 2 = 0
This.Columns( i ).BackColor = RGB( 0 , 0 , 255 )
ELSE
This.Columns( i ).BackColor = RGB( 255 , 255 , 255 )
ENDIF
ENDFORnullnull VFP支持面向对象的程序设计(OOP)。VFP将对象分成了两大类,即容器类和控件类。
▲类
类是面向对象程序设计的核心。将具有相同的结构、操作,并遵守相同的规则的对象聚合在一起,这组对象即称为类
▲容器类
容器类是包容其它对象的类。不同的容器所能包含的对象是不相同的。
▲控件类
控件类是可以包含在容器类中的类,它用于进行一种或多种的相关控制。null▲属性
属性是定义对象的特征或某一方面的行为。
在VFP中,所创建的对象的属性由对象所基于的类决定,也可以为对象定义新的属性。
▲事件
事件是由对象识别的一个动作,可以编写相应的代码对此动作进行响应。
通常事件是由一个用户动作产生(如鼠标单击事件Click),也可以由程序代码或系统产生(计时器的Timer事件)。
在VFP中,不同的对象所能识别的事件有所不同。null▲方法
方法是对象能够执行的一个操作。
在VFP中,方法是与对象相关联的过程(完成某种操作的处理代码),通常也称作方法程序,它与对象紧密地连接在一起。null1、什么是临时关系
所谓临时关系是在两张打开的表(数据库表或自由表)之间用SET RELATION命令建立起来的表之间的临时性关联。
两张表之间一旦建立了临时关系,子表的记录指针将随主表的指针的移动而移动。这样,便允许当在关系中“一”方(或父表)选择一个记录时,会自动去访问关系中“多”方(或子表)的相关记录。null2、临时关系和永久关系的联系:
▲无论建立临时关系还是永久关系,所建立关系的两张表之间应该确实在客观上存在着一种关系(一对一或一对多);在两个不存在客观关系的表之间建立临时或永久关系,是无任何意义的
▲永久关系在许多场合下可作为默认的临时关系。当然,用户可以删除这种默认的临时关系
▲临时关系和永久关系中的主表都可以有多个子表null3、临时关系和永久关系的区别:
▲临时关系是用来控制相关表之间记录的访问;而永久关系主要是用来存储相关表之间的参照完整性。附带地可以作为默认的临时关系或查询中默认的联接条件
▲临时关系在打开表后由SET RELATION命令创建,并且随表的关闭而解除;永久关系永久地保存在数据库中,不必在每次使用时重建null▲临时关系可以在自由表之间、库表之间或自由表与库表之间建立;永久关系只能在数据库表之间建立
▲临时关系中,一张表只能作为一张临时关系的子表,即子表不能隶属于两张主表;永久关系中,一张表可作为多张主表的子表null▲ Load事件
在创建对象前发生该事件。
该事件应用于表单和表单集。
Load事件先为表单集发生,然后再为表单集所包含的表单发生。
在Load事件发生时还没有创建任何表单中的控件对象,因此在Load事件的处理程序中不能对控件进行处理。 null 所谓类是指:具有相同的结构、操作,并遵守相同的规则的对象的集合。
在VFP中,系统提供了以下一些类:
基类
是VFP系统提供的内部定义的类,可用作其它用户自定义类的基础。
子类
是以其它类的定义为起点,为某一种对象所建立的新类。子类将继承任何对父类(即子类所基于的类)所做的修改。
用户自定义类
与VFP基类相似,但由用户定义,并且可用来派生子类。这种类没有可视化的表示形式。null 在引用对象时,必须指明对象与容器层次的关系,犹如在文件操作时,必须指出文件所在的磁盘和文件夹。可以这样说,引用对象就是提供对象的地址。
对象引用分为绝对引用和相对引用两种,引用时,各个对象之间以及对象和属性之间必须用“ . ”进行分隔。
例:
FormSet1 . Form1 . Text1
ThisForm . Label1 . Captionnull▲绝对引用
绝对引用是指从容器的最高层次引用对象,给出了对象的绝对地址。
在容器的最高层次(表单集或表单)需要引用对象变量,默认情况下对象变量和表单(集)的文件名相同。
特别提醒:
请注意教材P151和P195对绝对引用叙述的不同之处。null表单集1.Form1.Text1表单集1.Form1.PageFrame1.Page1.CommandGroup1.Command2null▲相对引用
相对引用是指在容器层次中相对于某个容器层次的引用。相对引用通过一些关键字指明所要处理的对象。
相对引用通常应用于某个对象的事件处理代码或方法程序代码中,即在某个容器对象的事件处理代码或方法程序中对所包容的对象的引用,引用时可以直接使用其对象名。nullVFP提供了若干个关键字来进行相对引用(P151):注:This、ThisForm、ThisFormSet仅在方法程序或事件处理代码中使用。null▲Show方法
Show方法用于显示一个表单,并且确定是模式表单还是无模式表单。
语法:
Object.Show([ nStyle])
nStyle 为1时,表单为模式表单;为2时表单为无模式表单;如果省略,表单按WindowType属性指定的样式显示。
Show方法把表单(集)的Visible属性设置为.T.,并使表单成为活动的对象。如果表单的Visible属性已经设置为.T.,则Show方法使它成为活动对象。null▲CREATEOBJECT( ) 函数
语法:
CREATEOBJECT ( ClassName , 参数1 , 参数2 , …)
本函数用来从定义或支持OLE的应用程序中创建一个对象,并将对象引用赋给内存变量或数组元素,其返回值类型为对象型。