1 / 23

Visual FoxPro 程序设计教程

Visual FoxPro 程序设计教程. 第 8 章. 表单集与多重表单. 8.2 多重表单. 8.1 表单集. ● 表单的类型. ● 创建表单集. ● 主从表单之间的参数传递. ● 表单集的应用. ● 隐藏 Visual FoxPro 主窗口. 8.1 表单集. 表单集有以下优点: (1) 可同时显示或隐藏表单集中的全部表单。 (2) 可以可视的调整多个表单以控制它们的相对位置。

sharne
Download Presentation

Visual FoxPro 程序设计教程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visual FoxPro 程序设计教程

  2. 第8章 表单集与多重表单 8.2 多重表单 8.1 表单集 ●表单的类型 ●创建表单集 ●主从表单之间的参数传递 ●表单集的应用 ●隐藏Visual FoxPro 主窗口

  3. 8.1 表单集 表单集有以下优点: (1) 可同时显示或隐藏表单集中的全部表单。 (2) 可以可视的调整多个表单以控制它们的相对位置。 (3) 因为表单集中所有表单都是在单个.scx文件中用单独的数据环境定义的,可自动地同步改变多个表单中的记录指针。如果在一个表单的父表中改变记录指针,另一个表单中子表的记录指针则被更新和显示。 如果需要将多个表单处理为表单组,可以创建表单集。 运行表单集时,将加载表单集所有表单和表单的所有对象。加载带着很多控件的多个表单将会花费几秒钟的时间。 教学进程

  4. 表单集的应用 【例8-1】使用表单集设计的电子标题板程序(如图8-2所示)。 设计步骤如下: (1) 设计“控制”表单。 表单中各对象属性的设置参见图8-3。 图8-2 使用表单集设计的电子标题板程序 图8-3 设计“控制”表单 教学进程

  5. (2) 创建表单集。 (3) 新建自定义方法。 ●编写表单集的自定义方法Yidong()的代码: DO CASE CASE THIS.Tag = "1" && 用MOVE方法向上向左移动 20 线 THIS.Form2.Label1.Move( THIS.Form2.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" && 向上向右移动 20 线 教学进程

  6. THIS.Form2.Label1.Move( THIS.Form2.Label1.Left + 3, THIS.Form2.Label1.Top – 3) IF THIS.Form2.Label1.Left >= (THIS.Form2.Width – THIS.Form2.Label1.Width) THIS.Tag = "1" && 如果到达表单右边界,向上向左移动 ELSE IF THIS.Form2.Label1.Top <= 0 THIS.Tag = "3" && 如果到达表单顶端,向下向右移动 ENDIF ENDIF CASE THIS.Tag = "3" && 向下向右移动 20 线 THIS.Form2.Label1.Move( THIS.Form2.Label1.Left + 3, THIS.Form2.Label1.Top + 3) IF THIS.Form2.Label1.Left >= (THIS.Form2.Width - THIS.Form2.Label1.Width) THIS.Tag = "4" && 如果到达表单右边界,向下向左移动 ELSE 教学进程

  7. IF THIS.Form2.Label1.Top <= 0 THIS.Tag = "3" && 如果到达表单顶端,向下向右移动 ENDIF ENDIF CASE THIS.Tag = "3" && 向下向右移动 20 线 THIS.Form2.Label1.Move( THIS.Form2.Label1.Left + 3, THIS.Form2.Label1.Top + 3) IF THIS.Form2.Label1.Left >= (THIS.Form2.Width - THIS.Form2.Label1.Width) THIS.Tag = "4" && 如果到达表单右边界,向下向左移动 ELSE IF THIS.Form2.Label1.Top >= (THIS.Form2.Height – THIS.Form2.Label1.Height) THIS.Tag = "2" && 如果到达表单底端,向上向右移动 ENDIF ENDIF CASE THIS.Tag = "4" && 向下向左移动 20 线 教学进程

  8. THIS.Form2.Label1.Move( THIS.Form2.Label1.Left – 3, THIS.Form2.Label1.Top + 3) IF THIS.Form2.Label1.Left <= 0 THIS.Tag = "3" && 如果到达表单左边界,向下向右移动 ELSE IF THIS.Form2.Label1.Top >= (THIS.Form2.Height – THIS.Form2.Label1.Height) THIS.Tag = "1" && 如果到达表单底端,向上向左移动 ENDIF ENDIF ENDCASE 教学进程

  9. (4) 编写事件代码: ●编写表单集的Activete事件代码: THIS.Tag = "1" ● “控制”表单Form1中编辑框Edit1的Click事件代码: LPARAMETERS nKeyCode, nShiftAltCtrl IF nKeyCode = 13 THISFORMSET.Form2.Label1.Caption = THIS.Value ENDIF ● “控制”表单Form1中“开始”按钮Command1的Click事件代码: THISFORMSET.Form2.Timer1.Enabled = .T. ●“控制”表单Form1中“暂停”按钮Command2的Click事件代码: THISFORMSET.Form2.Timer1.Enabled = .F. ●“控制”表单Form1中“关闭”按钮Command3的Click事件代码: THISFORMSET.Release 教学进程

  10. “标题板”表单Form2中计时器Timer1的Timer事件代码:“标题板”表单Form2中计时器Timer1的Timer事件代码: 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 教学进程

  11. 8.2 多重表单 表单的类型 VFP允许创建以下几种类型的表单(如图8-5所示): (1) 子表单: (2) 浮动表单: (3) 顶层表单 图8-5 表单的类型 教学进程

  12. 子表单 建立一个子表单的步骤: (1) 用“表单设计器”创建或编辑表单。 (2) 可将表单的ShowWindow属性设置为下列值之一: 0 — 在屏幕中(默认)。子表单的父表单即为Visual FoxPro主窗口。 1 — 在顶层表单中。当子窗口显示时,子表单的父表单是活动的顶层表单。如果希望子窗口出现在顶层表单窗口内,而不是出现在Visual FoxPro主窗口内时,可选用该项设置。 (3) 如果希望子表单最大化时与父表单组合成一体,可设置表单的MDIForm属性为“真”(.T.);如果希望子表单最大化时仍保留为一独立的窗口,可设置表单的MDIForm属性为“假”(.F.)。 教学进程

  13. 浮动表单 浮动表单是由子表单变化而来,建立浮动表单的步骤: (1) 用“表单设计器”创建或编辑表单。 (2) 可将表单的ShowWindow属性设置为以下值之一: 0 — 在屏幕中(默认)。浮动表单的父表单将出现在Visual FoxPro主窗口。 1 — 在顶层表单中。当浮动窗口显示时,浮动表单的父表单将是活动的顶层表单。 (3) 将表单的Desktop属性设置为“真”(.T.)。 顶层表单 建立顶层表单的步骤: (1) 用“表单设计器”创建或编辑表单。 (2) 将表单的ShowWindow属性设置为“2 — 作为顶层表单”。 教学进程

  14. 当管理一个表单的多个实例时,必须记住以下要点:当管理一个表单的多个实例时,必须记住以下要点: (1) 在启动表单中创建一个数组属性,数组中的每个元素用来存放一个表单的实例变量,如果事先不知道有多少个实例,跟踪实例变量的最简便的方法就是使用数组。 (2) 对于拥有多个实例的表单,将其DataSession属性设置为2 – 私有数据工作期。私有数据工作期为表单的每个实例提供一个独立的工作区,因此选定的表和记录指针的位置都是独立的。 例如,在主表单中定义一个数组属性.aForms,然后在主表单中就可以用以下代码建立子表单Multi.scx的多个实例: n = ALEN(THISFORM.aForms) DO FORM Multi NAME THISFORM.aForms[n] LINKED DIMENSION THISFORM.aForms[nInstance + 1] 此时,以下代码将设置第2个子表单实例的Cption属性为:我是第2个 aForms[2].Caption = "我是第2个" 进一步编写本例的代码时,可以管理表单对象数组,使得关闭表单后,空的数组元素能被作为打开的表单重新使用。否则,数组的大小将不断增加,元素的个数也逐个增加。 教学进程

  15. 主从表单之间的参数传递 主表单在调用子表单时,使用DO命令的下列格式,可以实现主从表单之间的参数传递。 (1) 接受从子表单返回的值: DO FORM 〈子表单名〉 TO〈 内存变量〉 说明:从子表单返回的值存放于〈内存变量〉中,在主表单中可以被使用。 (2) 主表单向子表单传递数据: DO FORM 〈表单文件名〉 WITH 〈实参表列〉 说明:在子表单的Init事件代码中应该有如下代码来接受数据: PARAMETERS 〈形参表列〉 〈实参表列〉与〈形参表列〉中的参数应用逗号分隔,〈形参表列〉中的参数数目不能少于〈实参表列〉中的参数数目。多余的参数变量将初始化为:.F. – 假。 (3) 主表单与子表单相互传递数据: DO FORM 〈表单文件名〉 WITH 〈实参表列〉 TO 〈内存变量〉 下面的例子创建自定义的“输入框”表单来模拟VB中的输入框函数,在主表单与子表单之间传递参数。 教学进程

  16. 【例8-2】从主表单中将输入框的“标题”、“信息”和“默认值”传给子表单(如图8-6),然后将子表单输入框中的输入值返回主表单(如图8-7)。 图8-6 将“标题”、“信息”和“默认值”传给子表单 教学进程

  17. 图8-7 主表单得到返回值 教学进程

  18. 设计步骤如下: (1)首先设计子表单(InputBox.scx)。 ① 建立应用程序用户界面。 ② 设置对象属性。 ③编写程序代码。 ● 编写子表单form1的事件代码: Init事件: PARAMETERS cPrompt,ctitle,cDefault SET EXACT ON IF TYPE('cDefault') = 'L' cDefault = "" ENDIF IF TYPE('ctitle') = 'L' ctitle = "输入框" 教学进程

  19. ENDIF IF TYPE(' cPrompt ') = 'L' cPrompt = "请输入:" ENDIF THIS.Caption = ctitle THIS.Label1.Caption = cPrompt THIS.Text1.Value = cDefault SET EXACT OFF UnLoad事件: RETURN THISFORM.creturn ●编写“确定”按钮Command1的Click事件代码: THISFORM.creturn = THISFORM.Text1.Value THISFORM.Release ●编写“取消”按钮Command2的Click事件代码: THISFORM.Release 教学进程

  20. (2)然后设计主表单。 ① 建立应用程序用户界面。 ② 设置对象属性。 ③ 编写程序代码。 ● 编写“输入框”按钮Command1的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 ●编写“关闭”按钮Command2的Click事件代码: THISFORM.Release 教学进程

  21. 隐藏Visual FoxPro主窗口 在运行顶层表单时,如果不希望显示Visual FoxPro的主窗口,有两种方法可以隐藏Visual FoxPro的主窗口。 1. 利用Visible属性 可以使用应用程序对象的Visible属性按要求隐藏或显示Visual FoxPro主窗口。 (1) 在表单的Init事件中,包含下列代码行: Application.Visible = .F. (2) 在表单的Destroy事件中,包含下列代码行: Application.Visible = .T. 2. 使用配置文件 在配置文件中包含以下行,可以隐藏Visual FoxPro主窗口: SCREEN = OFF 教学进程

  22. 习题8 8.1在表单集的不同表单中进行控制和属性的设置(如图8-10所示)。 图8-10 表单集中的不同表单 教学进程

  23. 8.2使用表单集设计口令验证表单与系统表单。如果是合法用户则进入系统表单,否则将关闭表单集。8.2使用表单集设计口令验证表单与系统表单。如果是合法用户则进入系统表单,否则将关闭表单集。 8.3使用主、子表单形式设计口令验证系统。 8.4在例7-6中使用输入框子表单输入数据。 教学进程

More Related