




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章 表单集与多重表单,9.1 表单集 创建表单集 表单集的应用,9.2 多重表单 表单的类型 主从表单之间的参数传递 隐藏Visual FoxPro主窗口,大多数的应用程序都有不同的用户界面,这样就有必要介绍多个表单的使用。 如果在程序中同时出现的表单之间存在频繁的信息交流,可以使用“表单集”来组织表单。 如果表单之间存在调用关系,可以利用“多重表单”。,9.1 表单集,表单集有以下优点: 可同时显示或隐藏表单集中的全部表单。 可以可视的调整多个表单以控制它们的相对位置。 因为表单集中所有表单都是在单个.scx文件中用单独的数据环境定义的,可自动地同步改变多个表单中的记录指针。如果在一个表单的父表中改变记录指针,另一个表单中子表的记录指针则被更新和显示。 如果需要将多个表单处理为表单组,可创建表单集。 运行表单集时,将加载表单集所有表单和表单的所有对象。加载带着很多控件的多个表单将会花费几秒钟的时间。,表单集是在“表单设计器”中创建的。 无论是建立一个新表单还是打开已有的表单,进入“表单设计器”后,从主菜单中,选择“表单”菜单中的“创建表单集”,即可创建一个新的表单集FormSet1,如图所示。,9.1.1 创建表单集,表单集是一个包含有一个或多个表单的父层次的容器,该容器不可见。创建表单集以后,该表单集包含原有的一个表单,可以向表单集中添加新的表单或删除表单。如下图所示。,若要向表单集中添加新的表单,可以从主菜单的“表单”栏中,选择“添加新表单”。 若要从表单集中删除表单,可以: 第1步:在“属性”窗口对象列表框中,选定要删除的表单。 第2步:从主菜单的“表单”栏中选择“移除表单”。 如果表单集中只有一个表单,则无法删除表单,只可删除表单集而只剩下单个的表单。 若要删除表单集,可以从主菜单的“表单”栏中选择“移除表单集”。,例9-1 使用表单集设计的电子标题板程序(如图)。,创建表单集:在主菜单中选择“表单”中的“创建表单集”,创建一个包含原有“控制”表单的表单集FormSet1。然后再在“表单”菜单中选择“添加新表单”,表单设计器中出现第二个表单(Form2)。在Form2中增加一个标签Label1和一个计时器Timer1。,9.1.2 表单集的应用,为表单集创建自定义方法Yidong(),实现斜向移动,其代码为:,DO CASE CASE THIS.Tag = “1” Label1.Left 3, THIS.Form2.Label1.Top 3) IF THIS.Form2.Label1.Left = 0 THIS.Tag = “2” & 如果图片到达窗体左边界,向上向右移动 ELSE IF THIS.Form2.Label1.Top = 0 THIS.Tag = “4” & 如果图片到达窗体顶端,向下向左移动 ENDIF ENDIF,CASE THIS.Tag = “2“ 程序通过窗体宽度减去图片宽度获得窗体右边界 ELSE IF THIS.Form2.Label1.Top = 0 THIS.Tag = “3” & 如果图片到达窗体顶端,向下向右移动 ENDIF ENDIF,CASE THIS.Tag = “3” Height THIS.Form2.Label1.Height) THIS.Tag = “2” & 如果图片到达窗体底端,向上向右移动,程序通过窗体高度减去图片高度并减去主题条和菜单条占的680线决定窗口底端 ENDIF ENDIF,CASE THIS.Tag = “4“ Label1.Left 3, THIS.Form2.Label1.Top + 3) IF THIS.Form2.Label1.Left =(THIS.Form2. Height THIS.Form2.Label1.Height) THIS.Tag = “1” & 如果图片到达窗体底端,向上向左移动 ENDIF ENDIF ENDCASE,LPARAMETERS nKeyCode, nShiftAltCtrl IF nKeyCode = 13 THISFORMSET.Form2.Label1.Caption = THIS.Value ENDIF,表单集的Activate事件代码:,THIS.Tag = “1“,“控制”表单Form1中编辑框Edit1的keypree事件代码:,“控制”表单Form1中“开始”按钮Command1的Click事件代码: THISFORMSET.Form2.Timer1.Enabled = .T.,“控制”表单Form1中“暂停”按钮Command2的Click事件代码: THISFORMSET.Form2.Timer1.Enabled = .F.,“控制”表单Form1中“关闭”按钮Command3的Click事件代码: THISFORMSET.Release,n = THISFORMSET.Form1.OptionGroup1.Value DO CASE CASE n = 1 IF THISFORM.Label1.Left + THISFORM.Label1.Width 0 THISFORM.Label1.Left = THISFORM.Label1.Left 5 ELSE THISFORM.Label1.Left = THISFORM.Width ENDIF CASE n = 2 IF THISFORM.Label1.Top + THISFORM.Label1.Height 0 THISFORM.Label1.Top = THISFORM.Label1.Top 5 ELSE THISFORM.Label1.Top = THISFORM.Height ENDIF CASE n = 3 THISFORMSET.yidong() ENDCASE,“标题板”表单Form2中计时器Timer1的Timer事件代码:,9.2 多重表单,表单集中表单的“地位”是平等的,没有主次关系,而多重表单是指具有主从关系的表单,由“主”表单(或称父表单)调用“子”表单,这里“主”、“子”表单处于不同的层次。,9.2.1 表单的类型,VFP允许创建以下几种类型的表单(如图所示):,子表单。包含在另一个窗口中,用于创建MDI(多文档界面)应用程序的表单。 浮动表单。属于父表单(主表单)的一部分,但并不包含在父表单中。也可用于创建MDI应用程序。 顶层表单。没有父表单的独立表单,用于创建一个SDI(单文档界面)应用程序,或用作MDI应用程序中其他子表单的父表单。,1. 有关的属性 创建各种类型表单的方法大体相同,但需设置特定的属性以指出表单应该如何工作。 除了在第1章中介绍的常用表单属性外,与多重表单有关的表单属性,见表9-1。,如果创建的是子表单,则不仅需要指定它应在另外一个表单中显示,而且还需指定是否是MDI (多文档界面)类的子表单,即指出表单最大化时是如何工作的。 如果子表单是MDI类的,它会包含在父表单中,并共享父表单的标题栏、标题、菜单以及工具栏。 非MDI类的子表单最大化时将占据父表单的全部用户区域,但仍保留它本身的标题和标题栏。,2. 子表单 建立一个子表单的步骤: 用“表单设计器”创建或编辑表单。 表单的ShowWindow属性可设为下列值之一: 0 在屏幕中(默认)。子表单的父表单即为Visual FoxPro主窗口。 1 在顶层表单中。当子窗口显示时,子表单的父表单是活动的顶层表单。如果希望子窗口出现在顶层表单窗口内,而不是出现在Visual FoxPro主窗口内时,可选用该项设置。 如果希望子表单最大化时与父表单组合成一体,可设置表单的MDIForm属性为“真”(.T.);如果希望子表单最大化时仍保留为一独立的窗口,可设置表单的MDIForm属性为“假”(.F.)。,3. 浮动表单 建立浮动表单的步骤: 用“表单设计器”创建或编辑表单。 可将表单的ShowWindow属性设置为以下值之一: 0 在屏幕中(默认)。浮动表单的父表单将出现在Visual FoxPro主窗口。 1 在顶层表单中。当浮动窗口显示时,浮动表单的父表单将是活动的顶层表单。 将表单的Desktop属性设置为“真”(.T.)。,4. 顶层表单 建立顶层表单的步骤: 用“表单设计器”创建或编辑表单。 将表单的ShowWindow属性设置为“2作为顶层表单”。,5. 子表单的显示 若要在某表单中显示该子表单,只需在顶层表单的事件代码中包含DO FORM命令,指定要显示的子表单的名称。 e.g. DO FORM MyChild,6. 子表单的多个实例 在同一时刻,可以有一个类定义的多个实例活动。 管理一个表单的多个实例时,须记住以下要点: 在启动表单中创建一个数组属性,数组中的每个元素用来存放一个表单的实例变量,如果事先不知道有多少个实例,跟踪实例变量的最简便的方法就是使用数组。 对于拥有多个实例的表单,将其DataSession属性设置为2 私有数据工作期。私有数据工作期为表单的每个实例提供一个独立的工作区,因此选定的表和记录指针的位置都是独立的。,主表单在调用子表单时,使用DO命令的下列格式,可以实现主从表单之间的参数传递。,9.2.2 主从表单之间的参数传递,1. 接受从子表单返回的值 DO FORM 子表单名 TO 内存变量 说明:从子表单返回的值存放于内存变量中,在主表单中可以被使用。,2. 主表单向子表单传递数据 DO FORM 表单文件名 WITH 实参表列 说明:在子表单的Init事件代码中应该有如下代码来接受数据: PARAMETERS 形参表列 实参表列与形参表列中的参数应用逗号分隔,形参表列中的参数数目不能少于实参表列中的参数数目。多余的参数变量将初始化为.F. 假。,3. 主表单与子表单相互传递数据 DO FORM表单文件名WITH实参表列 TO内存变量,【例9-2】从主表单中将输入框的“标题”、“信息”和“默认值”传给子表单(如图9-6),然后将子表单输入框中的输入值返回主表单(如图9-7)。,设置对象属性。首先在子表单中增加一个自定义属性creturn,用来存放返回值。然后设置其他对象的属性,见下表。,(1) 首先设计子表单(InputBox.scx),PARAMETERS cPrompt,ctitle,cDefault SET EXACT ON IF TYPE(cDefault) = L cDefault = “ ENDIF IF TYPE(ctitle) = L ctitle = “输入框“ ENDIF,子表单form1的事件代码: Init事件:,IF TYPE( cPrompt ) = L cPrompt = “请输入:“ ENDIF THIS.Caption = ctitle THIS.Label1.Caption = cPrompt THIS.Text1.Value = cDefault SET EXACT OFF,RETURN THISFORM.creturn,UnLoad事件:,THISFORM.creturn = THISFORM.Text1.Value THISFORM.Release,(2) 然后设计主表单,“确定”按钮Command1的Click事件代码:,THISFORM.Release,“取消”按钮Command2的Click事件代码:,cParam1 = THISFORM.Container1.Text1.Value cParam3 = THISFORM.Container2.Text1.Value cParam2 = THISFORM.Container3.Text1.Value DO FORM LOCFILE(“inputbox.scx“) WITH ; cParam1,cParam2,cParam3 TO nRetValue THISFORM.Container4.Text1.Value = nRetValue,THISFORM.Release,“关闭”按钮Command2的Click事件代码:,“输入框”按钮Command1的Click事件代码:,说明:函数LOCFILE(文件名,扩展名,显示信息)在指定目录中查找文件名,扩展名指定的文件,若找到则返回文件名及其路径,否则打开对话框提供文件目录供检索。,1.利用Visible属性 在表单的Init事件中,包含下列代码行: Application.Visible = .F. 在表单的Destroy事件中,包含下列代码行: Application.Visible = .T.,9.2.3 隐藏Visual FoxPro主窗口,在运行顶层表单时,若不希望显示VFP的主窗口,有两种方法可隐藏VFP的主窗口。,2. 使用配置文件 在配置文件中包含以下行: SCREEN = OFF,小结 第9章 表单集与多重表单,9.1 表单集 9.2 多重表单 创建表单集 表单的类型 表单集的应用 主从表单之间的参数传递 隐藏Visual FoxPro主窗口,习题9,1. 在表单集的不同表单中进行 控制和属性的设置 (如图9-10所示)。 2. 使用表单集设计口令验证表 单与系统表单。如果是合法 用户则进入系统表单,否则 将关闭表单集。 3. 使用主、子表单形式设计口 令验证系统。 4. 在例8-6中使用输入框子表 单输入数据。,1. 在表单集的不同表单中进行控制和属性的设置 (如图9-10所示)。,表单集formser1的activete事件: this.form2.text1.setfocus 右表单中: Command1的click事件: if this.caption=“文本字体改为粗体“ thisformset.form2.text1.fontbold=.T. this.caption=“由粗体风格还原“ else this.caption=“文本字体改为斜体“ thisformset.form2.tex1t.fontbold=.F. endif,Command2的click事件: if this.caption=“文本字体改为斜体“ thisformset.form2.text1.fontitalic=.T. this.caption=“由斜体风格还原“ else this.caption=“文本字体改为斜
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 空调采购合同
- 微课在中小学教学中的有效性-洞察及研究
- 智能范式自适应技术-洞察及研究
- 危化品仓储安全法规完善-洞察及研究
- 2025-2030运动后恢复食品专业运动员与大众市场差异分析报告
- 水稻加工副产品环保型粘合剂生产创新创业项目商业计划书
- 数字身份跨域认证创新创业项目商业计划书
- 循环水养殖技术推广创新创业项目商业计划书
- 文化用品设备出租创新创业项目商业计划书
- 政府投资管理系统创新创业项目商业计划书
- 200个句子涵盖高中英语3500词汇
- 二手车产品目录
- 医学影像学课件
- 护坡工程竣工汇报
- 地下水污染的控制与修复课件
- 设备设施管理培训课件
- 急诊科护士的病人家属安抚与沟通
- 单位就业人员登记表
- 原始社会的解体和阶级社会的演进统编版高中政治必修1
- 万人计划青年人才答辩万人计划青年拔尖人才课件
- 干部人事档案审核情况登记表
评论
0/150
提交评论