版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 表单设计,8.1 设计表单,8.1.1 设置数据环境,8.1.2 创建单文档和多文档界面,8.1.3用表单集扩充表单,返回,退出,8.1 设计表单,表单又称为界面或窗体,是VFP提供的一种功能强大的界面。各种对话框和窗口都是表单的不同表现形式。它可以使用户在简单明了的界面中查看数据或将数据记录输入到表中。在表单设计器中可以处理下列内容: 表单中不同类型的对象 与表单相关联的数据 顶层表单或子表单 能一起操作的多个表单 基于自定义模板的表单 表单和表单集是拥有自己的属性、事件和方法程序的对象,在表单设计器中可以设置这些属性、事件和方法程序。表单集包含了一个或多个表单,可以将它们作为一个整
2、体来操作。例如,如果一个表单集中有四个表单,可以在运行时用一个命令来显示或隐藏它们。 可以通过表单向导、表单设计器和快速表单来创建表单。可以,用如下的三种方法之一新建一个表单: 在“项目管理器”中选定“表单”,并选择【新建】按钮。 在【文件】菜单中选择【新建】命令,再选定“表单”,再选择【新建文件】按钮。 使用CREATE FORM命令。 通过项目管理器创建表单示例,1、选择“文档”选项卡,2、选择“表单”,3、单击【新建】,4、进入新建表单程序,弹出“新建表单”对话框,单击,“表单设计器”窗口,新表单,在新表单(Form1)上可以可视化地添加控件并进行属性、方法程序设计。,8.1.1 设置数
3、据环境,每一个表单或表单集都包括一个数据环境(Data Environment)。数据环境是一个对象,它包含与表单相互作用的表或视图,以及表单所要求的表之间的关系。可以在“数据环境设计器”中直观地设置数据环境,并与表单一起保存。 在表单运行时,数据环境可以自动打开、关闭表或视图。而且,通过设置“属性”窗口中ControlSource(指定与对象对立联系的数据源)属性设置框,在这个属性框中列出了数据环境中的所有字段,数据环境将帮助设置控件用的ControlSource属性。 1、常用数据环境属性,单击打开图片,2、向数据环境设计器中添加表或视图 向数据环境设计器中添加表或视图时,可以看到属于表或
4、视图的字段或索引。若要向数据环境中添加表或视图,可以按如下步骤来进行: (1)打开“数据环境设计器”,从“数据环境”菜单中选择“添加”,1、在表单上右击,弹出表单的快捷菜单,2、在快捷菜单中单击“数据环境”菜单项,打开“数据环境设计器”,3、添加表或视图的方法与建立查询时添加表或视图相同,4、在此框中选择Student后单击【添加】,在关闭了“添加表或视图”对话框后,若还想向“数据环境”中添加表或视图,可采用以下方法之一: 在“数据环境设计器”中右击,打开数据环境的快捷菜单,从中选择“添加”菜单项,将“添加表或视图”对话框再次打开,添加方法与上述相同。 在“数据不境设计器”处于激活状态时,系统
5、菜单上会有【数据环境】菜单,可以单击【数据环境】|【添加】将“添加表或视图”对话框再次打开。 将要添加的表或视图从打开的项目或“数据库设计器”拖放到“数据环境设计器”中。 若已将“数据环境设计器”关闭了,要添加表或视图时,除了用前文所介绍的在表单上右击打开表单的快捷菜单,用快捷菜单操作以外,也可以在系统菜单上单击【显示】|【数据环境】,将“数据环境设计器”打开,打开了“数据环境设计器”后的添加方法与上相同。 当“数据环境设计器”处于活动状态时,“属性”窗口会显示与数,单击打开动画,据环境相关的对象及属性。在“属性”窗口的“对象”框中,数据环境的每个表或视图,表之间的每个关系,以及数据环境本身均
6、是各自独立的对象。,要打开“属性”窗口,可以在表单或“数据环境设计器”中右击,在快捷菜单上选择【属性】菜单项,在“数据环境设计器”中右击,打开快捷菜单。,单击【属性】菜单项打开“属性”窗口。,选项卡,属性或方法程序列表,属性值或方法程序,属性及方法程序功能说明,3、从数据环境设计器中移去表 当将表从数据环境中移去时,与这个表有关的所有的关系也随之移去。若要将表和视图从数据环境设计器中移去,可以: (1)在“数据环境设计器”中选择要移去的表或视图。 (2)在“数据环境”快捷菜单中选择【移去】命令。,在“数据环境设计器”中选择要移去的表或视图。,在选定表或视图上右击,打开快捷菜单。,单击【移去】,
7、4、在数据环境设计器中设置关系 如果添加进数据环境设计器的表具有在数据库中设置的永久关系,这些关系将自动地加到数据环境中。如果表中没有永久的关系,可以在数据环境设计器中设置这些关系。,要在数据环境设计器中设置这些关系,可以将字段从主表拖到相关表中的相匹配的索引标识上。也可以将字段从主表拖到相关表中的字段上。如果和主表中的字段对应的相关表中没有索引标识,系统将提示是否创建索引标识。,1、先向表单的“数据环境设计器”添加两个表,如图,按“学号”字段设置Student表与Grade表的一对多关系: 在“数据环境设计器”中的Student表中选择“学号”字段 并将其拖到Grade表的“学号”字段上。,
8、右击表间的关系连接线打开快捷菜单,在快捷菜单中单击“属性”,打开属性窗口:,在属性选择列表中选择OneToMany,单击“属性选择框”弹出属性值,选择.T.-真,将两表设置为一对多关系,父表别名,如果在建立关系前Grade表没有按关联字段(学号)建立索引,则在将“学号”从Student表中拖到Grade表时将弹出对话框:,单击【确定】时系统将先按“学号”为Grade表建立索引,然后才建立两表间的关系。,5、在数据环境设计器中编辑关系 在数据环境设计器中设置了一个关系后,在表之间将有一条连线指出这个关系。 若要编辑关系的属性,可在“属性”窗口中从属性列表框选择要编辑的关系。 关系的属性对应于SE
9、T RELATION和SET SKIP命令中的子句和关键字。 RelationalExpr(指定基于父表中的字段而又与子表中的索引相关的表达式)属性的默认设置为主表中主关键字字段的名称。如果相关表是以表达式作为索引的,就必须将RelationalExpr属性设置为这个表达式。例如,如果相关表以UPPER(cust_id)作为索引,就必须将RelationalExpr属性设置为UPPER(cust_id)。 如果关系不是一对多关系,必须将OneTOMany属性(指定是否只有在子表中遍历了所有相关记录之后才移动父表记录的记录指针)设置为“假”(.F.)。这对应于使用SET RELATION命令时不
10、发出SET SKIP命令。 将关系的OneToMany属性设置为“真”(.T.),相当于发出SET SKIP命令。当浏览父表时,在记录指针浏览完子表中所有的相关记录之前,记录指针一直停留在同一父记录上。 注意:如果在表单或表单集中想设置一对多关系,必须将OneToMany属性设置为“真”(.T.),甚至在数据库中已经建立了永久一对多关系时也必须如此。,返回,8.1.2 创建单文档和多文档界面,VFP允许创建两种类型的应用程序: 多文档界面(MDI)各个应用程序由单一的主窗口组成,且应用程序的窗口包含在主 窗口中或浮动在主窗口顶端。VFP基本上是一个MDI应用程序,带有包含于VFP主窗口中的命令
11、窗口、编辑窗口和设计器窗口。 单文档界面(SDI)应用程序由一个或多个独立窗口组成,这些窗口均在Windows桌面上单独显示。Microsoft Exchange即是一个SDI应用程序的例子,在该软件中打开的每条消息均显示在自己独立的窗口中。 由单个窗口组成的应用程序通常是一个SDI应用程序,但也有一些应用程序综合了SDI和MDI的特性。例如,VFP将调试器显示为一个SDI应用程序,而它本身又包含了自己的MDI窗口。 为了支持这两种类型的界面,VFP允许创建以下几种类型的表单: 子表单:包含在另一个窗口中,用于创建MDI应用程序的表,表单。子表单不可移至父表单(主表单)边界之外,当其最小化时将
12、显示在父表单的底部。若父表单最小化,则子表单也一同最小化。 浮动表单:属于父表单(主表单)的一部分,但并不是包含在父表单中。而且,浮动表单可以被移至屏幕的任何位置,但不能在父窗口后台移动。若将浮动表单最小化时,它将显示在桌面的底部。若父表单最小化,则浮动表单也一同最小化。浮动表单也可用于创建MDI应用程序。 顶层表单:没有父表单的独立表单,用于创建一个SDI应用程序,或用作MDI应用程序中其他子表单的父表单。顶层表单与其他Windows应用程序同级,可出现在其前台或后台,并且显示在Windows任务栏中。 1、指定表单类型 创建各种类型表单的方法大体相同,但需设置特定属性以指出表单应该如何工作
13、。如果创建的是子表单,则不仅需要指定它应在另外一个表单中显示,而且还需指定是否是MDI类的子表单,,即指出表单最大化时是如何工作的。如果子表单是MDI类的,它会包含在父表单中,并共享父表单的标题栏、标题、菜单以及工具栏。非MDI类的子表单最大化时将占据父表单的全部用户区域,但仍保留它本身的标题和标题栏。,若要建立一个子表单,可以: 用“表单设计器”创建或编辑表单。 可将表单的ShowWindow属性设置为下列值之一:, 0-在屏幕中:子表单的父表单将为VFP的主窗口。 1-在顶层表单中。当子窗口显示时,子表单的父表单是活动的顶层表单。如果希望子窗口出现在顶层表单窗口内,而不是出现在VFP主窗口
14、内时。可选用该项设置。,如果希望子表单最大化时与父表单组合成一体,可设置表单的MDIForm属性(指定表单是否为MDI窗口)为“真”(.T.);如果希望子表单最大化时仍保留为一独立的窗口,可设置表单的MDIForm属性为“假” (.F.)。 浮动表单是由子表单变化而来。若要指定为浮动表单,可以: 用“表单设计器”创建或编辑表单。 可将表单的ShowWindow属性设置为以下值之一: 0-在屏幕中。浮动表单的父表单将出现在VFP主窗口。 1-在顶层表单中。当浮动窗口显示时,浮动表单的父表单将是活动的顶层表 单。 将表单的DeskTop属性(指定表单是否包含在VFP主窗口中)设置为“真” (.T.
15、)。 若要指定顶层表单,可以: 用“表单设计器”创建或编辑表单。 将表单的ShowWindow属性设置为“2-作为顶层表单”。,2、显示位于顶层表单中的子表单 如果所创建的子表单中的ShowWindow属性设置为“1-在顶层表单中”,则不需直接指定一顶层表单作为子表单的父表单。而是在子窗口出现时,VFP指派成为该子表单的父表单。 若要显示位于顶层表单中的子表单,可以: 创建顶层表单。 在顶层表单的事件代码中包含DO FORM命令,指定要显示的子表单的名称。例如,在顶层表单中建立一个按钮,然后在按钮的Click事件代码中包含如下的命令,如图所示:,注意:在显示子表单时,顶层表单必须是可视的、活动
16、的。因此,不能使用顶层表单的Init事件来显示子表单,因为此时顶层表单还未激活。 激活顶层表单,如有必要,触发用以显示表单的事件。,3、隐藏VFP主窗口 在运行顶层表单时,可能不希望VFP主窗口是可视的。使用应用程序对象的Visible属性(指定对象是可见还是隐藏)按要求隐藏或显示VFP主窗口。 若要隐藏VFP主窗口,可以: 在表单的Init事件中,包含下列代码行: Appliction.Visible=.F. 在表单的Destroy事件中,包含下列代码行: Appliction.Visible=.T. 在某些方法程序或事件中,可使用THISFORM.Release命令关闭表单。 注意:也可以
17、在配置文件中包含以下行,用以隐藏VFP主窗口: SCREEN=OFF 4、在顶层表单中添加菜单 若要在顶层表单中添加菜单,可以: 创建顶层表单的菜单。,返回,将表单的ShowWindow属性设置为“2-作为顶层表单”。 在表单的Init事件中,运行菜单程序并传递两个参数: Do menuname.mpr WITH oForm,LAutoRename 其中,oForm是表单的对象引用。在表单的Init事件中,THIS作为第一个参数进行传递。 LAutoRename指定了是否为菜单取一个新的唯一的名字。如果计划运行表单的多个实例,则将.T.传递给LAutoRename。 例如,可以使用下列代码调用
18、名为mySDImenu的菜单: DO mySDImenu.mpr WITH THIS,.T.,8.1.3用表单集扩充表单,可以将多个表单包含在一个表单集中,作为一组处理。表单集有以下优点: 可同时显示或隐藏表单集中的全部表单。 可以可视的调整多个表单以控制它们的相对位置。 因为表单集中所有表单都是在单个.SCX文件中用单独的数据,环境定义的,可自动地同步改变多个表单中的记录指针。如果在一个表单的父表中改变记录指针,另一个表单中子表的记录指针则被更新和显示。 注意:运行表单集时,将加载表单集所有表单和表单的所有对象。加载带着很多控件的多个表单会花几秒钟的时间。 1、创建表单集 表单集是一个包含有
19、一个或多个表单的父层次的容器。可在“表单设计器”中创建表单集,若要创建表单集,可从“表单”菜单中,选择“创建表单集”选项。 如果不需要将多个表单处理为表单组,则不必创建表单集。创建表单集以后,则可向其中添加表单。 2、添加和删除表单 创建了表单集以后,可添加新表单或删除表单。若要向表单集中添加附加的表单,可从“表单”菜单中选择“添加新表单”。 若要从表单集中删除表单,可以: 在“表单设计器”“属性”窗口的对象列表框中,选择要删除的,表单。 从“表单”菜单中选择“移除表单”。 如果表单集中只有一个表单,可删除表单集而只剩下表单。若要删除表单集,可从“表单”菜单中选择“移除表单集”。 表单以表的格
20、式存储在.SCX后缀的文件中。创建表单时,.SCX表包含了一个表单的记录,一个数据环境的记录,和两个内部使用记录。为每个添加到表单或数据环境中的对象添加一个记录。如果创建了表单集,则为表单集及每个新表单添加一个附加的记录。每个表单的父容器为表单集,每个控件的父容器为其所在的表单。 注意:当运行表单时,若不想在表单集中的所有表单的初始时就设置为可视的,可以在表单集运行时,将不准备显示的表单的Visible属性设置为“假”(.F.)。要显示的表单的Visib1e属性设置为“真”(.T.)。,返回,8.2 向表单中添加对象,8.1.1 设置数据环境,返回,退出,8.2.2 向表单中添加VFP控件,8
21、.2.3 向表单中添加数据绑定型控件,8.2.4 向表单中添加用户自定义对象,8.2.5 确定表单中的控件数目,8.2.6在表单中添加属性和方法程序,8.2.7 包含预定义常量,8.2.1 向表单中添加VFP容器,除表单集和表单外,VFP还提供了四个基本容器类:命令按钮组、选项按钮组、表格和页框。 若要在表单中添加容器对象,可从“表单控件”工具栏上选择所需的容器对象的按钮(表格、页框或按钮组),并在表单中拖动,调整到所需要的大小。,在表单中添加命令按钮组或选项按钮组时,按钮组默认包含两个按钮。在表单中添加页框时,页框默认包含两个页面,将ButtonCount属性(指定一个命令按钮组或选项按钮组
22、中按钮的数目)或PageCount属性(指定页框对象中所含有的页数)设置为需要的数目,可以包含更多的按钮或页面。 向表单中添加表格时,ColumnCount属性(指定表格、组合框或列表框中列对象的数目)的默认值为1,表示处于AutoFill状态。这样,在运行时表格将显示与RecordSource属性(指定与表格控件建立联系的数据源)中指定的表具有同样字段数量的列。如果不想处于“AutoFill”状态,可以设置表格的ColumnCou-nt属性为指定列的数目。 VFP中的所有容器对象都有与它们相关联的记数属性和收集属性。收集属性是引用其每个被包含对象的数组,记数属性是指示其包含的对象数的数值属性
23、。 每个容器的收集和记数属性根据包含在容器中的对象类型来命名,下表列出了容器及其相应的收集和记数属性。,【例8-1】建立一个只含一个表格(列数由提供数据的表的字段数确定)和一个命令按钮的表单,运行表单时,表格中显示的内容底色红绿交替。,第2步、单击表单控件工具栏上的(表格)按钮;,第1步、在项目管理器中选择“表单”,再单击【新建】,单击【新建表单】,在系统菜单上单击【显示】|【表单控件工具栏】,第2步、单击表单控件工具栏上的(表格)按钮;,第3步、在表单上按住鼠标左键拖出一个矩形框,释放鼠标。,在表单上单击右键,选择【数据环境】,选择Student表后单击【添加】,第5步、选择表单上的表格对象
24、,在“属性”对话框中选择“数据”选项卡,,o=THISFORM.Grid1 FOR I=1 TO o.ColumnCount IF I%2=0 o.Columns(i).BackColor=RGB(0,255,0) ELSE o.Columns(i).BackColor=RGB(255,0,0) ENDIF ENDFOR,要实现此功能,可采取如下步骤: 第1步、选择【文件】|【新建】菜单,然后选择“表单”,再选择【新建文件】或在项目管理器中选择“表单”,再单击【新建】,再在对话框中选择【新建文件】;,第5步、选择表单上的表格对象,在“属性”对话框中选择“数据”选项卡,在属性区域找到Record
25、Source属性,在属性值输入文本框中选择“Student”表。,第3步、在表单上按住鼠标左键拖出一个矩形框,释放鼠标。,第4步、在表单上单击右键,选择【数据环境】,在弹出的“数据环境设计器”中单击右键,选择【添加】,再在弹出的“添加表或视图”对话框中选择“Student”再按【添加】按钮,再按【关闭】按钮,然后关闭“数据环境设计器”。,第6步、选择表单,再选择“属性”上的“方法程序”选项卡,双击“Activate Event”属性,在方法程序编辑框中输入代码。,第7步、采用相似的方法建立一个命令按钮,将Caption属性(指定对象文本标题)值设置为“退出” 。,单击“命令按钮”按钮,在表单上
26、单击,添加“命令”按钮,双击“退出”按钮,输入事件代码,THISFORM.RELEASE,表单运行结果:,单击表单上的【退出】按钮可以将表单关闭。,返回,8.2.2 向表单中添加VFP控件,控件工具栏能使用户很方便地在表单中添加任何一种标准的VFP控件,常用的VFP控件如下所示: 复选框 图像 OLE绑定型控件 文本框 组合框 标签 OLE容器控件 计时器 命令按钮 线条 形状 编辑框 列表框 微调 若要在表单中添加控件,可在“表单控件”工具栏中选择所需的控件按钮(单击),在表单中单击或拖动按钮,把它调整到想要的大小。 如在上例中向表单添加了一个“表格”控件和一个“命令按钮”控件。,返回,8.
27、2.3 向表单中添加数据绑定型控件,通过给控件的ControlSource属性设置字段或给表格的RecordSource属性设置表或视图,可使控件与表、视图、表的字段、或视图的字段中的数据相联系。但也可通过直接将表和视图从下列位置拖到表单中,以创建数据绑定型控件: “项目管理器” “数据库设计器” “数据环境设计器” “表设计器”中“属性”选项卡的“FieldMapping”设置或“选项”对话框的“FieldMapping”选项卡的设置,是这种方法创建控件类的基础。 上例中将表格的RecordSource属性设置为Student,即是将表格的数据源与表Student建立联系。,返回,8.2.4
28、 向表单中添加用户自定义对象,VFP最强大的功能之一就是能创建在应用程序不同部分都可以使用和重复使用的类。如果创建了类,就能将它们添加到表单中。 若要基于自定义类上添加对象,可在“项目管理器”中,将类拖动到容器中,当给工具栏添加类时,也可直接从“表单控件”工具栏中添加。 1、在控件工具栏上添加类库 类库必须在注册后才能在“表单控件”工具栏中显示出来。若要注册类库,可以: 从“工具”菜单中选择“选项”打开“选项”对话框。 在“选项”对话框中选择“控件”选项卡。 选择“添加”按钮。 在“打开”对话框中,选择一个要加到“选定”列表中的类库,并选择“打开”按钮。 重复步骤和。 “选定”列表中列出了类库
29、中的类,在“表单设计器”中可以和,VFP基类一样方便地使用这些类。 注意:如果要在每次运行VFP时“表单控件”工具栏中的类库都有效,可在“选项”对话框中,选择“设置为默认值”。 此外,也可以在“表单设计器”中直接注册类库。若要在表单设计器中注册一个类库,可以: 在“表单控件”工具栏中选择“查看类”按钮。 从子菜单中选择“添加”。 在“打开”对话框中选择要添加到“表单控件”工具栏上的类库,然后选择“打开”按钮。 2、从类库中添加对象到表单 如果从“选项”对话框的“类”选项卡或从“查看类”子菜单添加类库,就能在“表单设计器”中访问它们。 若要从“表单控件”工具栏添加自定义对象,可以: 在“表单控件
30、”工具栏中,选择“查看类”按钮。 从已注册类库的列表中选择一个类库,它包含了要加到表单中的控件。,返回,单击所需要的控件,并在表单中拖动到合适大小。 注意:如果想从“查看类”工具栏中移去一个可视类库,可以在“选项”对话框的“控件”选项卡中,选择“选定”列表中列出的一个可视的类库,然后选择“移去”按钮。 当向不是基于VFP基类的表单添加对象时,类库的相对路径(.vcx文件)存储在表单的.scx文件中。如果要将表单或类库移到另一个位置,在运行表单时VFP显示一个对话框,可以人工寻找类库。,8.2.5 确定表单中的控件数目,使用ControlCount属性可以确定表单中究竟有多少个控件,而Contr
31、olsn属性允许引用表单上的任何一个控件。下面的程序用于打印出当前活动表单上所有控件的Name属性: ACTIVATE SCREEN VAL(ALLTRIM(THIS.VALUE) 设置Command1的Click Event代码: THISFORMSET.ActiveForm.ActiveControl.FontBold=; !THISFORMSET.ActiveForm.ActiveControl.FontBold THIS.FontBold=THISFORMSET.ActiveForm.ActiveControl.FontBold 说明:赋值时所赋的值既可以是指定值,也可是变量。,2、在
32、运行时使用表达式设置属性 在运行时也可以使用表达式或函数来设置属性。若要在运行时将属性设置为表达式,可为属性指定一个表达式,或者为属性指定一个用户自定义函数的结果。例如,建立一个“属性设置示例”表单,根据一个变量的不同值,可以将一个按钮的标题设置为“添加”或“保存”,另一个按钮的标题设置为“编辑”或“还原”。,首先在创建表单对象时中声明这个变量并设置表单的名称和“退出按钮”的名称:,即在表单的Init Event方法程序中写入如下代码(也可在Activate Event事件中): PUBLIC glediting &定义变量 Glediting=.F. &为变量赋初始值 THISFORM.CA
33、PTION=属性示例 &设置表单名称 THISFORM.COMMAND3.CAPTION=退出 &将Command3按钮名设为“退出” 然后在第一个和第二个命令按钮的Click Event事件中,分别添加如下代码: glediting=IIF(glediting=.F.,.T.,.F.) &当点击事件发生时,变量值发生变化 THISFORM.Refresh &调用表单的刷新方法程序,最后在表单的Refresh方法程序中添加如下代码: THISFORM.COMMAND1.CAPTION =IIF(glediting=.F.,添加,保存) THISFORM.COMMAND2.CAPTION =II
34、F(glediting=.F.,编辑,还原) dodefault(),第1、2行命令是根据glediting的值设置命令按钮名称。 Caption设置中使用了一个IIF()表达式。 IIF()是一个函数。 IIF()的功能是:该函数计算一个逻辑表达式的值,然后根据计算结果,返回两个表达式中的一个。如果逻辑表达式的值为“真”,则返回第一个表达式;如果值为“假”,则返回第二个表达式。 第3条命令的作用是调用父类中的方法程序。在此处是调用表单父类中的Refresh方法程序。,在表单中单击【添加】或【编辑】按钮时,按钮名改变。,当再次在表单中单击【添加】或【编辑】按钮时,按钮名再次改变。如此循环改变。
35、,3、设置多个属性 用户可以同时为一个表单的多个对象设置多个属性,此时可使用WITHENDWITH结构。例如,对于上面例子中的两个命令按钮,在标题名称变化时还要使它们的宽度、字体、字体风格、背景颜色变化,可在表单的Refresh方法程序代码中包含下面的语句:,IF glediting=.F. WITH THISFORM.COMMAND1 .Caption=添加 .Width=100 .FontName=黑体 .FontBold=.T. .ForeColor=RGB(0,128,255) ENDWITH WITH THISFORM.COMMAND2 .Caption=编辑 .Width=100
36、.FontName=黑体,.FontBold=.T. .ForeColor=RGB(0,128,255) ENDWITH ELSE WITH THISFORM.COMMAND1 .Caption=保存 .Width=75 .FontName=宋体 .FontBold=.F. .ForeColor=RGB(0,0,0) ENDWITH WITH THISFORM.COMMAND2 .Caption=还原,.Width=75 .FontName=黑体 .FontBold=.F. .ForeColor=RGB(0,0,0) ENDWITH ENDIF DODEFAULT(),表单运行后的结果如图,返
37、回,8.4 管理表单,8.4.1 隐藏和释放表单,8.4.2 将参数传递到表单,8.4.3 从表单返回值,8.4.4 在表单中使用本地和远程数据,退 出,返 回,8.4.1 隐藏和释放表单,用户可以隐藏一个表单,使它不可见。在隐藏表单后,用户不能访问表单上的控件,但仍可以用程序完全控制它们。 若要隐藏表单,可使用Hide方法程序。例如,在与命令按钮的Click事件相关的代码中,可以包含下面一行代码: THISFORM.Hide 当用户单击命令按钮时,表单仍在内存中,但不可见。 当用户完成对表单的操作后,就可以让用户释放表单。在释放表单后,用户就不能再访问表单的属性和方法程序了。 若要释放表单,
38、可以使用RELEASEE命令。例如,在与“退出”命令按钮的Click事件相关的代码中包含下面一行代码: THISFORM.Release 当用户单击“退出”命令按钮时,表单被关闭。,返回,的应用程序中,可以使用选项按钮,使用户在多项选择A、B、C、D中进行选择。还可以用选项按钮在学生表中指明性别等。若要将一个选项按钮的Caption属性保存到表中,可以: 将选项组的Value属性设置为空字符串。 将选项组的ControlSource属性设置为表中的一个字符型字段。 在选项组的Click事件代码中加入如下代码: THISFORM.Refresh 例如,在Student表中加入“新生类别”字符型字
39、段,将选项组中选项按钮的标题分别设置为“城应”、“农应”、“城往”和“农往”,并且选项组的ControlSource属性设置为“新生类别”,那么当用户选择标题为“城应”的选择项时,“城应”将被保存在表Student的“新生类别”字段中。 (2)使用列表框和下拉列表框 列表框和下拉列表框(即style属性为2的组合框控件下拉列表)为用户提供了包含一些选项和信息的可滚动列表。列表框中,任何时候都能看到多个项;而在下拉列表中,只能看到一个项,用户可单击向下按钮来显示可滚动的下拉列表框。,常用的列表属性和方法程序,填充列表框或组合框 通过设置RowSourceType和RowSource属性,可以用不
40、同数据源中的项填充列表框。RowSourceType属性决定列表框或组合框,的数据源类型,如数组或表,设置好RowSourceType后,设置RowSource属性可指定列表项的数据源。RowSourceType共有十种类型:0-无,表示没有,由程序向列表中添加项;1-值;2-别名;3-SQL语句;4-查询;5-数组;6-字段;7-文件;8-结构;9-弹出式菜单。 创建具有多列的列表框 虽然列表框默认为一列,但VFP中的列表框可以包含任意列。多列列表框和表格的区别在于,在多列列表框中用户一次选择一行,而在表格中用户可以选择每个单元,另外不能直接编辑列表中的数据。 若要在列表框中显示多列,可以:
41、 将ColumnCount属性设置为所需的列数。 设置ColunWidths属性。例如,如果列表框中有三列,下面的命令将各列宽度分别设置为60、45和80。 THISFORM.LIST1.ColumnWidths=”60,45,80” 将RowSourceType属性设置为“6-字段”。,允许用户选择列表框中的多项 默认情况下,一次只能选定一个列表项,但也可以允许用户选择列表中的多个列表项。若要选择列表中的多项,可将列表的MultiSelect属性设置为“真” 。 为了处理选定的项,例如把它们复制到一个数组或在应用程序的其他地方使用它们,可以循环遍历各列表项,处理Selected属性为“真”
42、的项。下面的代码包含在列表框的InteractiveChange事件中,在comboselected组合框中显示这个列表框中的选定项,并且在txtNoSelected文本框中显示选定项的数目: nNumberSelect=0 &跟踪数目的变量 THISFORM.Combo1.Clear &清除组合框 FOR nCnt=1 TO THIS.ListCount IF THIS.Selected(nCnt) nNumberSelect=nNumberSelect+1 THISFORM.Combo1.Additem(THIS.List(nCnt) ENDIF ENDFOR THISFORM.Text1
43、.Value=nNumberSelect THISFORM.Refresh,允许用户在列表框中添加项 除了让用户从列表框中选择项外,还允许用户交互地向列表中添加项。若要以交互方式向列表添加项,可使用AddItem方法程序。 在下面示例中,当用户按Enter键时,文本框KeyPress的事件中的代码将文本框中的文本添加到一个列表框中,并且清除文本框中的文本。 LPARAMETERS nKeyCode, nShiftAltCtrl IF nKeyCode=13 THISFORM.List1.AddItem(THIS.Value) THIS.Value= ENDIF 根据列表值刷新一对多显示 当用户
44、通过选择列表中的一个值来转到某个记录时,可能需要一个一对多关系反映父表中记录指针的变化。利用本地表以及本地视图或远程视图都可以实现这一功能。 本地表:列表的RowSourceType属性如果为2-别名或6-字段,,并且RowSource属性是本地表,该本地表在表单的数据环境中具有关系设置,则当用户选择新值时,可使用InteractiveChange事件中的THISFORM.Refresh方法程序。一对多关系中的“多”方只自动显示与关系中父表的表达式相匹配的记录。 视图:如果列表框的属性是一个本地视图或远程视图,则对一对多显示的刷新就有 一些不同。下面的示例说明了使用列表框和表格创建一个表单,列
45、表框显示了Student表的“学号”字段的值,表格显示了与在列表框中选择的“学号”字段相关的学生的成绩。 首先,在“视图设计器”中创建一个Stud_grad参数化视图。当在“视图设计器”中创建该视图时,一定要将外部关键字的选择标准设置到一个变量中。在本例中,该变量称为Stud_ID。即在“视图设计器”中首先添加一个表Grade,再选【查询】|【视图参数】,在弹出的“视图参数”对话框中定义一个变量Stud_ID,然后在“视图设计器”中选择【字段】选项卡中单击【全部添加】按钮,再选择【筛选】选项卡,在“字段名”下的下拉选择框中选择“Grade.,学号”,在“实例”下的文本框中输入?Stud_ID参
46、数。 然后,当设计表单时采用下列过程和步骤。请注意,该视图需要一个参数值,该参数在加载表单时是不可用的。通过将视图临时表对象的NoDataOnload属性设置为“真” ,则只有在调用REQUERY()函数时才运行视图,这时用户可能已经为参数化视图中使用的变量选择了一个值。 若要按本地视图或远程视图设计一个一对多列表,可按如下步骤进行: 向“数据环境”添加表Student和带有参数的视图Stud_grad。 对于“数据环境”中的视图临时表对象,在其“属性”窗口中将NoDataOnload属性设置为“真” 。 将列表的RowSourceType属性设置为“6-字段”,并且将列表的RowSource
47、属性设置为在视图的参数中引用为外部关键字的字段。在示例中设置为Student.学号。 将表格的RecordSource属性设置为原先创建的视图的名称Stud_grad。 在列表的InterActiveChange事件代码中,将列表的值保存在变量中,然后重新查询视图,如下例所示: Stud_id=THIS.Value =Requery(Stud_grad),2、预先不能确定输入的控件 (1)使用文本框 文本框是一类基本控件,它允许用户添加或编辑保存在表中非备注字段中的数据。若要在程序中引用或更改文本框中显示的文本,则要设置或引用Value属性。 如果设置了文本框的ControlSource属性,
48、则显示在文本框中的值将保存在文本框的Value属性中,同时保存在ControlSource属性指定的变量或字段中。 常用文本框属性,检验文本框中的数据是否有效 若要检验文本框中的值,可在与Valid事件(控件失去焦点前发生)相关的方法程序中写进相应代码。如果值无效,则返回“假” 或0。如果返回“假” ,就显示一条“无效输入”信息。如果要显示自己的信息,则可在Valid事件代码中包含MESSAGEBOX()函数并且返回0值。 例如,建立一个对Student表输入数据的表单,其中的字符型字段可以接收任何字符的输入,数字型字段如果不加以限制也可以接收任何数字,而对Student表来说,这是可以的。但
49、事实上为了保证表中数据的正确性,在数据输入时往往要对数据进行校验,如对“年龄”字段,通常不会超过如25岁,为了保证输入的数据不超过这个限制,可以通过在文本框的Valid事件代码中包含下面代码: IF THIS.Value25 =MESSAGEBOX(“输入的年龄超过上限!”,64,”年龄输入错误”) RETURN 0 ENDIF,对文本框中的文本进行格式编排 InputMask属性决定在文本框中可以键入的值,而Format属性则决定在文本框中值的显示方式。 例如,将InputMask属性设置为999,999.99可限制用户只能输入具有两位小数并小于1,000,000的数值。在用户输入任何值之前
50、,逗点和句点就显示在文本框中。如果用户按一个字符键,则这个字符不能显示在文本框中。如果有逻辑字段,并且想让用户能键入“Y”或“N”而不是“T”或“F”,应将InputMask属性设置为“Y”。 在文本框中接收用户密码 在应用程序中,经常需要获得某些安全信息,如密码。这时可以用文本框来接收这一信息,而在屏幕上并不显示。如希望接收用户输入同时不显示实际输入值,可将文本框的PasswordChar属性(指定文本控件内是显示用户输入的字符还是显示占位符,该属性如果输入值则为指定占位符)设置为“*”或其他的一般字符。如果属性设置为除空字符串的任何字符,文本框的Value和Text属性将保存用户的实际输入
51、,而对用户所按的每一个键都用设定的一般字符来显示。,(2)使用编辑框 在编辑框中允许用户编辑长字段或备注字段文本,允许自动换行并能用方向键。PageUp和PageDown键以及滚动条来浏览文本。 在编辑框中编辑备注字段 如果用户想在编辑框中编辑备注字段,只需将编辑框的Control Source属性设置为该备注字段。 在编辑框中对选定文本进行处理 编辑框和文本框有三个属性可以用于对选定文件进行操作:SelLength、SelStart和SelText。利用SelStart和SelLength和SelText属性可以从程序中选定文件。 注意:当改变SelStart属性时,编辑框就会滚动,显示新的
52、SelStart值。如果在一个循环中改变SelStart值,例如查找文本时,如果在执行这个过程之前包含THISFORM.LockScreen =.T.,在执行这个过程之后包含THISFORM.LockScreen =.F.,则代码可以执行得更快。,(3)使用组合框 将用户项添加到下拉组合框的列表中 要将新的用户值添加到下拉组合框,可在与组合框的Valid事件相关的方法程序中使用下面一行代码: THIS.AddItem(THIS.Text) 但是,在添加一项之前,最好检查保证在下拉组合框中没有该值。 LItemExists=.F. FOR ii=1 TO THIS.ListCount IF TH
53、IS.List(ii)=THIS.Text LItemExists=.T. EXIT ENDIF ENDFOR IF .NOT.lItemExists THIS.AddItem(THIS.Text) ENDIF,返回,8.5.2 使用命令按钮和命令按钮组控件,为了让用户完成一些和操作值无关的特定动作,例如,让用户关闭一个表单、打开另一个表单、在表中浏览、保存或取消编辑、运行报表或查询以及其他的操作。此时可借助命令按钮或命令按钮组控件来进行。命令按钮和命令按钮组的特定操作代码通常放置在命令按钮的Click事件中。 1、使命令按钮成为默认选择 将命令按钮的Default属性设置为“真”(.T.),
54、可使该命令按钮成为默认选择。默认选择的按钮比其他命令按钮多一个粗的边框。如果一个命令按钮是默认选择,那么按Enter键后,将执行这个命令按钮的Click事件。 注意:如果选定的表单对象是编辑框或表格,当按Enter时,不会执行默认选择按钮的Click事件代码。在编辑框中按Enter键,将在编辑框中的值加入一个回车和换行符;在表格中按Enter,将选择一个相邻的区域。若要执行默认按钮的Click事件,则要按Ctrl+Enter。,2、常用命令按钮属性,还可以将命令按钮组成一组,这样即可单独操作,也可作为一个组统一操作。 3、通过组来管理命令按钮的选择 要让组中所有命令按钮的Click事件代码都用
55、同一个方法程序过程,可将代码加入命令按钮组的Click事件代码中。命令组的Value属性指明单击了哪个按钮。 例如,建立一个“命令按钮示例”表单如图,IF !EOF() SKIP ENDIF CASE THIS.VALUE=3 THISFORM.RELEASE ENDCASE THISFORM.REFRESH,在该表单中添加了一个命令按钮组,其中有三个命令按钮,分别是【上一条记录】、【下一条记录】和【退出】,前二个命令按钮用来对当前表中的记录进行定位。现要求这三个命令按,钮采用同一个方法程序来实现各自的功能,可在表单的Comman-dGroup1容器的Click事件中加入如下代码:,DO CA
56、SE CASE THIS.VALUE=1 IF !BOF() SKIP -1 ENDIF CASE THIS.VALUE=2,为了控制当记录指针从表的顶部溢出后,不再执行【上一条记录】的命令和当记录指针从当前表的底部溢出后不再执行【下一条记录】的命令,可在CommandGroup1容器的Refresh方法程序中添加如下代码: IF BOF() THIS.COMMAND1.ENABLED=.F. THIS.COMMAND2.ENABLED=.T. ELSE IF EOF() THIS.COMMAND1.ENABLED=.T. THIS.COMMAND2.ENABLED=.F. ELSE THIS
57、.COMMAND1.ENABLED=.T. THIS.COMMAND2.ENABLED=.T. ENDIF ENDIF 如果为组中的某个命令按钮的Click事件编写了代码,当选择这个按钮时,将执行为该按钮编写的程序代码而不执行组的Click事件代码。,返回,8.5.3 用于显示文字、图形或图片的控件,1、使用图像控件 图像控件允许在表单中添加图片(.BMP)文件。图像控件和其他控件一样,具有一整套的属性、事件和方法程序。因此,在运行时可以动态地更改它。用户可以用单击、双击和其他方式来交互地使用图像。,2、使用标签 标签和文本框的不同之处在于标签没有数据源、不能直接编辑和不能用Tab键选择,在程
58、序中可以改变标签的Caption和Visible属性,让标签更好地显示不同的内容。,3、使用文本框和编辑框显示信息 设置文本框和编辑框的ReadOnly属性为“真” ,可以显示那些只能查看而不能修改的信息。如果编辑框无效用户就不能滚动文本。 4、使用表单图形显示信息,返回,8.5.4 使用表格控件,1、设置表格列数 首先需要设置的表格控件属性是列数。若要设置表格中的列数,可在“属性和方法程序”列表中选择ColumnCount属性,然后在“属性”框中,键入需要的列数。如果ColumnCount属性设置为1-(默认值),在运行时,表格将包含与其链接的表中字段同样数量的列。 2、在设计时人工调整表格
59、的显示 在表格中加入列后将改变列的宽度和行的高度。可以在“属性”窗口中人工设置列和行对象的高度和宽度属性,也可以在设计表格时可视地设置这些属性。若要切换到表格设计方式,可从表格的快捷菜单中选择“编辑”命令,然后在“属性”窗口的“对象”框中选择表格的一列。在表格设计方式下,表格周围将显示一个粗框。要切换出表格设计方式,只需选择表单或其他控件。若要调整表格中列的宽度,可以: 在表格设计方式下,将鼠标指针置于表格列的标头之间,这,时指针变为带有向左和向右箭头的条。 将列拖动到需要的宽度,或者在“属性”窗口中设置列的Width属性。 若要调整表格中行的高度,可以: 在表格设计方式下,将鼠标指针置于“表格”控件左侧的第一个按钮和第二个按钮之间,这时指针将变成带有向上和向下箭头的条。 将行拖动到需要的高度,或者在“属性”窗口中设置列的Height属性。 注意:将AllowRowSizing设置为“假”(.F.),可以防止用户在运行时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年地理竞赛测试题及答案
- 深度解析(2026)《GBT 30236-2013古代壁画保护修复方案编制规范》
- 2026年学林语文期末试题及答案
- 深度解析(2026)《GBT 30001.4-2013信息技术 基于射频的移动支付 第4部分 卡应用管理和安全》
- 意外伤害保险合同范本
- 2026高三励志大会上讲话校长讲话:未来一定是你们的
- 《DLT 880-2021带电作业用导线软质遮蔽罩》(2026年)合规红线与避坑实操手册
- 2026年生物科技研发服务合同协议
- 某著名企业Air《最美和声》娱乐营销传播方案落地活动策划执行部分BFD
- 某省市上城区二年级数学质量综合评估卷
- 2025年下半年浙江杭州市萧山区国有企业招聘人员笔试历年参考题库附带答案详解
- 2026年70周岁以上驾驶人三力测试模拟题
- 2026年《中华人民共和国保守秘密法》培训课件
- 攀枝花市2026年春季人才引进(484人)笔试备考试题及答案解析
- 2026年及未来5年中国美容美发机构行业发展监测及投资战略研究报告
- 升压站屏柜组立及二次接线专项施工方案
- 嘉兴浙江嘉兴市交通学校(嘉兴交通技工学校)校园招聘教师12人笔试历年参考题库附带答案详解
- 安全装置培训课件
- 雨课堂学堂在线学堂云《智能制造技术基础(华北电大 )》单元测试考核答案
- 2025年江苏省镇江市中考英语一模试卷
- 道路运输公司管理制度及操作规程
评论
0/150
提交评论