46
1 其其其其其其 其其其其 其其其其其其其 其其其其其

其它控件介绍 表单管理 多表单应用程序 类 建立工具栏

  • Upload
    bud

  • View
    111

  • Download
    5

Embed Size (px)

DESCRIPTION

其它控件介绍 表单管理 多表单应用程序 类 建立工具栏. 表单设计的基本步骤为:. 打开表单设计器 向表单添加控件 设置表单及控件的属性 添加表单及控件的事件代码 保存表单 运行及调试表单。. 其它控件介绍. 控件的通用属性 命令按钮组控件 编辑框 复选框和单选框 列表框和组合框 微调控件 表格和页框 超级连接 ActiveX 控件和 ActiveX 绑定控件. 控件的通用属性. Enabled 属性 Visible 属性 以 Font 打头的一组属性 为多个对象设置共同属性. - PowerPoint PPT Presentation

Citation preview

Page 1: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

1

其它控件介绍表单管理 多表单应用程序 类 建立工具栏

Page 2: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

2

表单设计的基本步骤为: 打开表单设计器向表单添加控件设置表单及控件的属性添加表单及控件的事件代码保存表单运行及调试表单。

Page 3: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

3

其它控件介绍 控件的通用属性 命令按钮组控件 编辑框 复选框和单选框 列表框和组合框 微调控件 表格和页框 超级连接 ActiveX 控件和 ActiveX 绑定控件

Page 4: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

4

控件的通用属性 Enabled 属性 Visible 属性 以 Font 打头的一组属性 为多个对象设置共同属性

这一属性是除“超级连接”之外的所有控件及表单都有的属性,其值可设置为: .T.- 真或 .F.- 假,指定表单或控件能否响应由用户引发的事件。只有“计时器”控件的这一属性的含义不同,请参阅 6.6.3 节。

这一属性是除“超级连接”和“计时器”之外的所有运行时可见的控件及表单都有的属性,其值可设置为: .T.- 真或 .F.- 假,指定运行时对象是可见还是隐藏。

FontSize :定义字的大小;FontName :定义文本的字体;FontColor :定义字的颜色;Fontbold :定义文字是否粗体;FontItalic :定义文字是否斜体;

这组属性是许多可有文字的对象都有的属性,如:表单、标签控件、命令按钮控件、文本框控件、表格控件、列表框控件等等。

按住 Shift 健分别单击若干对象,用来选取需设置属性的对象,属性窗口的对象组合框中将会显示“多重选定”文本,此时便可在属性窗口为这些对象设置共同属性,例如:设置 FontSize 属性改变文字大小。

Page 5: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

5

命令按钮组控件 命令按钮组控件是一个容器控件,它可包含若干个命令按钮,并能统一管理这些命令按钮,命令按钮组与组内的各命令按钮都有自己的属性,事件和方法程序,因而既可单独操作各命令按钮,也可对组控件进行操作。

命令按钮组的生成器 命令按钮组及其命令按钮的操作

按钮选项卡(1) 微调控件:指定命令按钮组中的按钮数,对应

于命令按钮组的 ButtonCount 属性(2) 表格:包含标题和图形两列。

标题列对应于命令按钮的 Caption 属性,命令按钮可以具有标题或图象,或两者都有。图形列对应于命令按钮的 Picture 属性。命令按钮会自动调整大小,以容纳新的标题和图片,组容器也会自动调整大小。

布局选项卡(1) 按钮布局:指定命令按钮组内的按钮按竖直方

向或水平方向排列。(2) 按钮间隔:指定按钮之间的间隔。

上述两项将影响命令按钮组的 Height 和 Width 属性。(3) 边框样式:指定命令按钮组有单线边栏或无边

框。

Click 事件的判别容器中对象的引用容器及其对象的编辑 常用命令按钮组的属性有:

ButtonCount :设置组中命令按钮的数目。BackStyle :设置命令按钮的背景是否透明。BorderStyle :定义命令按钮组的边框。

(2) 单击某命令按钮时,组控件的 Value 属性就会获得一个数值或字符串:当 Value 属性为 1( 默认值 ) 时,将获得命令按钮的顺序号,它是一个数值;而当 Value 属性设置为空时,将获得命令按钮的 Caption 值,它是字符串。于是在命令按钮组的 Click 事件代码中便可判别出单击的是哪个命令按钮,并决定执行的动作。

(1) 若命令按钮组及其所含的各命令按钮分别设置了 Click事件代码, Visual FoxPro 将以命令按钮的 Click 事件代码优先。例如引用命令按钮组中的命令按钮, Thisform.Commandgroupl.Commandl

或 This.Commandl 。 (1) 容器本身的编辑:设计时若在表单上选定容器,就可编

辑该容器的属性、事件代码与方法程序,但不能编辑容器中的对象。

(2) 容器中对象的编辑:要编辑容器中的对象,须先激活容器。激活的方法是选定容器的快捷菜单中的【编辑】命令,容器被激活的标志是其四周显示一个斜线边框,如图所示。容器激活后,用户便可选定其中的对象进行编辑。

Page 6: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

6

操作步骤如下:计算器的按钮部分用命令按钮组控件进行设计。向表单添加一个命令按钮组控件,在命令按钮组控件上单击右键,选择【生成器】,在按钮选项卡中设置按钮数目为 16 ,并设置标题 。然后在“布局”页面中设置“按钮布局”为:水平。单击【确定】按钮,关闭生成器。设置命令按钮组控件的 Height 属性值为 140 ,在命令按钮组控件上单击右键,选择【编辑】,移动命令按钮,将所有命令按钮的 height 和 Widdth 均设置为: 25 ,设置成 的状态。其它部分外观的设计同 [ 例 6-10] ,可以从 [ 例 6-10] 的表单中复制过来。

[例5-1] 用命令按钮组设计计算器。

设置命令按钮组控件 Commandgroup1 的 Value 属性值为: =“”

这一步骤非常重要,如没有这一步,计算器的设置要复杂得多。

在命令按钮组控件 Commandgroup1 的 Click 事件添加下列代码:

IF Thisform.t AND (asc(This.Value)>=45 AND ASC(This.Value)<=57) Thisform.Text1.Value="" &&清空文本框内容

ENDIF

IF This.Value="=" && 如果单击了“ =” 按钮x=Thisform.Text1.Value

Thisform.Text1.Value=str(&x,50,6) Thisform.t=.T.

ELSE && 如果单击了除“ =” 以外的按钮Thisform.Text1.Value=Thisform.Text1.Value+This.Value

Thisform.t=.F.

ENDIF

如图所示

如图所示

Page 7: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

7

编辑框 在编辑框中可以编辑长字符字段或备注字段中的文本。编辑框中允许输入多段文本,也可以使用方向键、 PageUp 键、 PageDown 键、滚动条来移动文本。编辑框只能处理字符型数据。

编辑框的常用属性有: AllowTabs :设置用户是否可以在编辑框中用 Tab 键前后移动。如果允许,应明确地指出用户可以通过按 Ctrl+Tab 移到下一个控件。

ControlSource :设置将哪一个数据库的表的那个字段的值显示在编辑框中。HideSelection :当编辑框没有焦点时选定文本是否以选定状态显示。 ReadOnly :设置用户是否可以改变编辑框的文本。 ScrollBars :设置是否显示垂直滚动条。 SelLength :返回用户在控制的文本区域中选定的字符数目,或指定要选定的字符数目。

SelStart :返回控件的文本输入区域中用户选择文本的起始点。当没有选定文本时,指示插入点的位置。另外,它还可以指定控件的文本输入区域中选择的文本起始点。 SelText :返回用户选定的文本,如果没有选定任何文本,则返回空字符串 ("") 。或指定包含选定文本的字符串。

Page 8: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

8

[例5-2] 建立一个表单,其外观如图所示

并完成下列功能: 编辑框与某表文件的的备注型字段绑定;执行表单后,用户选择编辑框的内容,单击【确定】按钮,选定的内容将在右边的文本框中出现。

操作步骤如下:

先作准备工作,建立一个名为 WBKLB.DBF 的表文件,包含一个字段,字段名为: NR ,类型为: M ,并输入一条记录的内容,内容可从某个已有的文件或帮助中复制过来。新建一个表单,设置表单的 Caption 属性值为:编辑框实例;为表单设置数据环境,在数据环境中添加表 WBKLB.DBF ;在表单中添加一个编辑框控件,一个文本框控件,设置编辑框的 ControlSourc 属性为: WBKLB.NR ;再在表单中添加一个命令按钮控件,设置该控件的 Caption 属性为:确定;Click 事件代码为:

Thisform.Text1.Value=Thisform.Edit1.Seltext

Page 9: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

9

复选框和单选框 复选框与选项按钮 ( 又译单选框 ) 是对话框中的常见对象,复选框允许同时选择多项,选项按钮则只能在多个选项中选择其中的一项。所以复选框可以在表单中独立存在,选项按钮只能存在于它的容器选项按钮组中。

复选框控件 选项按钮组控件

Page 10: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

10

复选框控件 复选框控件用于指定布尔状态:真或假,开或关,打开或关闭。复选框的常用属性有:

Caption :该属性的值用来定义复选框的标题,即说明该复选框的功能。ControlSource :该属性值指定与该复选框对象绑定的数据源。Value :指定复选框的状态。

Value 属性的设置有:设置 说明0 (默认值)未选定。1 选定。2 灰色,该设置只在代码中可用。

Style :该属性的值用来定义复选框的外观,有: 0- 标准、 1- 图形两种可选值。

Page 11: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

11

选项按钮组控件 选项按钮组常用来表示在一组可选的项目中,同一时刻有且仅有一项可以被选中。在选项按钮组控件上单击鼠标右键,然后选择【编辑】,可以对选项组中的每一个选项按钮进行属性和事件代码的设置。

选项组常用的属性有:ButtonCount :设置组中选项的数目。BackStyle :设置选项组的背景是否透明。BorderStyle :定义选项组的边框。Value :表示被选中的按钮序号,默认值为 1 。

选项的常用属性有:Caption :定义选项的说明。Value :设置选项是否被选中, 1 表示选中,0 表示未选中。Style :该属性的值用来定义单选框的外观,有: 0- 标准、 1- 图形两种可选值。选项按钮组控件也有生成器,用法同命令按钮组类似。这里不再详述,请看下面的例题。

Page 12: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

12

[例5-3] 建立一个表单,其外观并完成下列功能:

表单被执行时按图所示的格式显示日期和时间;当用户改变格式设置时,立刻按用户设置的格式显示日期和时间;

操作步骤如下:新建一个表单,添加五个标签控件、两个文本框控件、两个选项按钮组,两个复选框控件、两个形状控件、一个计时器控件,并设置相应属性,使其外观如图 5-6 所示,两个形状控件必须设置为“置后”。设置控件的关键属性,设置计时器控件的 Interval 属性值为: 10 ;设置两个文本框的 TabStop 属性值为: .F.- 假;上面文本框的 Width 属性值为: 240 ;下面文本框的 Width 属性值为: 210 ;其它属性值读者可参照已确定的属性值及图 5-6 的相对位置自定。

在计时器控件的 time 事件中添加以下代码:IF This.Parent.check1.Value=1

DO CASE

CASE This.Parent.Optiongroup1.Value=1

SET DATE TO YMD

CASE This.Parent.Optiongroup1.Value=2

SET DATE TO MDY

CASE This.Parent.Optiongroup1.Value=3

SET DATE TO DMY

ENDCASE

x=DOW(DATE()) && 用 DOW ()函数获取当前日期的星期数DO CASE

CASE x=1 && 如果是星期日y=" 日 "

CASE x=2 && 如果是星期一y=" 一 "

CASE x=3 && 如果是星期二y=" 二 "

CASE x=4 && 如果是星期三y=" 三 "

CASE x=5 && 如果是星期四y=" 四 "

CASE x=6 && 如果是星期五y=" 五 "

CASE x=7 && 如果是星期六y=" 六 "

ENDCASE

This.Parent.Text1.Value=DTOC(DATE())+" 星期 "+y

ELSE DO CASE

CASE This.Parent.Optiongroup1.Value=1

This.Parent.Text1.DateFormat=12

CASE This.Parent.Optiongroup1.Value=2

This.Parent.Text1.DateFormat=10

CASE This.Parent.Optiongroup1.Value=3

This.Parent.Text1.DateFormat=11

ENDCASE

This.Parent.text1.Value=DATE()

ENDIF

IF This.Parent.Optiongroup2.Value=1

SET HOURS TO 12

This.Parent.text2.Width=210

* 根据当前时间确定是上午,还是下午IF hour(DATETIME())>12

This.Parent.label5.Caption=" 下午 "

ELSE

This.Parent.label5.Caption=" 上午 "

ENDIF

ELSE && 如果用户选择 24 小时制SET HOURS TO 24

This.Parent.text2.Width=241

ENDIF

IF This.Parent.check2.Value=1

This.Parent.text2.Value=SUBSTR(TTOC(DATETIME()),10,5)

ELSE && 如果用户选择不显示秒This.Parent.text2.Value=SUBSTR(TTOC(DATETIME()),10,5)

ENDIF

如图所示

Page 13: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

13

列表框和组合框 列表框与组合框都有一个供用户选项的列表,但两者之间有两个区别:(1) 列表框任何时候都显示它的列表,而组合框平时只

显示一个项,待用户单击它的向下按钮后才能显示可滚动的下拉列表。若要节省空间,并且突出当前选定的项时可使用组合框。

(2) 组合框又分下拉组合框与下拉列表框两类,前者允许键入数据项;而列表框与下拉列表框都仅有选项功能。

Page 14: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

14

列表框控件 生成器

列表框生成器含有列表项、布局、样式、值等 4个选项卡,用于为列表框设置各种属性。

列表项选项卡 样式选项卡 布局选项卡 值选项卡

控件值源的类型 列表框的常用属性

列表项选项卡该选项卡用于指定要填充到列表框中的项。填充项可以是 3种类型数据之一:表或视图中的字段、手工输入的数据或数组中的值。

表或视图中的字段 手工输入数据

数组中的值

样式选项卡该选项卡用于指定列表框的样式,所显示的行数,要否递增搜索。下面仅说明显示行数的设置。“ 要显示的行数”微调控件用来调整列表框的显示行数,但是仅在文本选取 7 号字时所设置的行数与实际项数相符。原因是该微调控件的设置实际上改变了列表框的 Height 属性,而 Visual FoxPro则按象素来指定高度。

布局选项卡布局选项卡含有 1 个复选框和 1 个表格,用于控制列表框的列宽和显示。1)“ 调整列表框的宽度来显示所有列”复选框:该选

项自动设置了 Width 属性,能根据列表项选项卡中微调控件指定的列数自动调整列表框的宽度。

2) 表格:表格中显示了在列表项选项卡中定义的列,并可用鼠标拖动列标头右边的列间隔线来调整列宽,相当于修改了 Co1umnWidths 属性。双击列标头还可隐藏该列,使得表单执行时该列不显示,但其数据仍起作用。

值选项卡值选项卡包含两个组合框,分别用来指定返回值的列以及存储返回值的字段。1)“ 从哪一列中返回值”组合框:该组合框的操作对

应于 BoundColumn 属性。组合框列表中包含字段名或表示列号的选项,供用户决定列表框返回值的字段或列。

2) 字段名组合框:该组合框的操作对应于 ControlSource 属性,用来指定存储返回值的字段。

控件值源的类型 列表框和组合框的列表中可以填充各类数据,在上述的列表框生成器中,已涉及值,数组和字段 3种类型,实际上共有 9类.它们均由 RowSourceType 属性来指定, RowSourceType 属性的可取值如表 5-1 所示:

列表框的常用属性 MoverBars :设置列表框的左侧是否显示移动按钮。MultiSelect :设置用户是否可以同时在列表中选择多项。Value :返回列表框中选定的项,如果有多列,返回由 BoundColumn 属性指定的列的内容。DisplayValue :返回列表框中选定的项第一列的内容。

Page 15: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

15

[例5-4] 设计一个表单,实现 的简易数学用表。 原数取 1~100 。 操作步骤如下:

新建一个表单,向表单添加五个标签控件,一个列表框控件,并设置相关属性。设置列表框控件 List1 的属性 ColumnCount的值为 5 ,说明含有 5 列;属性 ColumnWidth 的值为: 30,40,50,50,150 ,确定 5 列各自的宽度。在控件 List1 的 Init 事件中添加如下代码:

FOR i=1 to 100

n=STR(i,3)

This.AddListItem(n,i,1)

n=STR(i*i,5)

This.AddListItem(n,i,2)

n=STR(SQRT(i),7,4)

This.AddListItem(n,i,3)

n=STR(LOG(i),7,4)

This.AddListItem(n,i,4)

n=STR(EXP(i),17,4)

This.AddListItem(n,i,5)

ENDFOR

如图所示

Page 16: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

16

组合框控件 组合框是列表框和文本框的组合。组合框有两种类型:下拉式组合框 , Style 属性的值是 0 时下拉式列表框, Style 属性的值是 2 时

组合框控件也有生成器,用法与列表框完全相同 除了生成器提到的属性外,组合框的常用属性还有:

Value 属性 DisplayValue 属性 ListCount 属性 ListIndex 属性 List 属性 Selected 属性

功能:返回组合框中选定的项,如果有多列,返回由 BoundColumn 属性指定的列的内容。 功能:返回组合框中选定的项第一列的内容。也可返回用户输入的内容。 功能:返回组合框或列表框中列表项的个数。说明:该属性在设计时不可用,运行时为只读属性。即仅可取用属性值,不可进行设置。

格式: Control.ListIndex[=nIndex]

功能:返回或设置组合框 ( 列表框 ) 列表显示时选定项的顺序号。说明:

(1) 本属性用顺序号来表示某项已被选定。 nIndex则代表要设置的顺序号,可取 1到 ListCount 之间的整数之一。

nIndex 的缺省值是 0 ,表示没有选定列表项。对于下拉组合框,当列表中没有与键入值相同的项时就返回 0 。

(2) 本属性设计时不可用,运行时可读写。

格式: Control.List(nRow[,nCol] )

功能:返回组合框或列表框第 nRow 行, nCol 列的内容。

格式:control.Selected(nIndex)[=IExpr]

功能:用于分辨组合框或列表框中某一列表项是否被选中。当选中时 Selected 属性返回 .T. ,否则返回 .F. 。说明:

(1)nIndex 表示列表项的显示顺序号;(2)IExpr 可取 .T. 或 .F. 之一,用来设置属性值;(3) 本属性设计时不可用,运行时可读写。

Page 17: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

17

微调控件 微调控件的常用属性有:

Increment :用户点按向上或向下按钮时每次增大或减小的值。KeyboardHighValue :能输入到微调控件文本框中的最大值。KeyboardLowValue :能输入到微调控件文本框中的最小值。SpinnerHighValue :用户按向上按钮时能达到的最大值。SpinnerLowValue :用户按向下按钮时能达到的最小值。Value :返回用户设置的值。

Page 18: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

18

[例5-5] 设计新增人事数据的表单

要求充分利用新学的知识,设计表单时尽量为用户着想,为用户提供方便。 设计步骤如下:新建一个名为 RSBWH 的表单,向表单添加数据环境,数据环境中添加 RSB.DBF和 BMDM.DBF 两个表文件。注意:必需删除两表间的关系。并向 BMDM 表添加一条空记录。

利用数据环境向表单快速添加控件:用鼠标指向 RSB 表的字段行,按下鼠标左键拖曳到表单的左上角,释放鼠标则产生如图所示的表单,默认表单不够大,可拖曳表单边框到足够大,就可以看到所有的控件。

对于性别字段的输入,只有两种可取值,没有必要让用户输入“男”或“女”,可利用选项按钮组控件,如图5-12 所示,由用户单击鼠标就可选定“男”或“女”。所以需将已有的与性别绑定的文本框删除。

操作如下:在表单空表处单击鼠标,取消对所有控件的选择,选择与性别绑定的文本框,按Delete 键删除。添加一个选项按钮组,设置成如图 5-13 右上角所示的外观。

对于“部门代码”字段的值要利用 BMDM 表的内容,删除与“部门代码”绑定的文本框,添加一个组合框控件,在组合框上单击鼠标右键,选择【生成器】,对“列表项”页面设置成如图5-14 所示,对“值”页面设置成如图 5-15 所示,其它两个页面不变,最后单击【确定】确认设置。

删除与“出生日期”和“工作日期”绑定的文本框,保留相应的标签,添加两个微调控件、一个组合框控件、一个形状控件和三个标签控件,并调整成第二行的外观。提示:形状控件要置后。在组合框上单击鼠标右键,选择【生成器】,对“列表项”页面设置,表格中的数一直输入到 12 ,其它三个页面不变,最后单击【确定】确认设置。并设置两个微调控件的属性示

选定输入年月日的所有控件,如图 5-17 所示。单击“复制”按钮,再单击“粘帖”按钮,这样就有了两个输入日期的控件,再将 Spinner1 、 Spinner2 、 Spinner3 、 Spinner4 的 Value 属性分别设置为: 1960 , 1 , 19

49 , 1 作为默认值。

对于“职称”字段,也需作处理,为给用户提供更方便的输入界面,删除与“职称”绑定的文本框,添加一个组合框控件,在组合框上单击鼠标右键,选择【生成器】,对“列表项”页面设置成如图 5-15 所示,对“值”页面设置成如图 5-19 所示,其它两个页面不变,最后单击【确定】确认设置。

对于“相片”字段,也需作处理,为美观起见,添加一个形状控件,使其置后,并设置成三维。为给用户提供更方便的输入界面,添加一个命令按钮,将命令按钮的外观设置成如图 5-13 所示,相片标签下的命令按钮形状,并设置该命令按钮的 Click 事件的代码为:

filename=GETPICT() &&利用 getpict()函数打开选择图片的对话框APPEND GENERAL 相片 FROM &filename && 将选取的图片放到当前记录的相片字段中Thisform.Refresh() &&刷新表单的显示,目的是让刚选的图显示出来

调整各控件的位置如图 5-13 所示,添加两个线条控件、两个命令按钮控件,线条的颜色一条设置成深灰、一条设置成白色,两条紧埃着,形成立体效果。

添加控件代码:Init 事件代码 “保存”按钮的 Click 事件代码 “ 取消退出”命令按钮的 Click 事件代码 四个组合框控件的 Init 事件代码 选项按钮组的 Click 事件的代码 与职称绑定组合框控件的 LostFocus 事件的代码

Page 19: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

19

表格控件 Visual FoxPro 提供了一个强大的工具来显示和操作多行数据,这就是表格。表格是一个容器对象,像表单集能包含多个表单一样,它可以包含多个列。另外,列可以包含表头和控件,并且每一部分都有自己的属性、事件和方法。

表格的组成 在表单窗口添加表格控件 表格编辑 表格的常用属性 用表格控件建立一对多表单

(1) 表格 (Grid) :由一或若干列组成.(2) 列 (Column) :一列可显示表的一个字段,列

由列标题和列控件组成。(3) 列标题 ( 例如: Headerl) :默认显示字段名,允许修改。

(4) 列控件 ( 例如: Textl) ;一列必须设置一个列控件,该列中的每个单元格都可用此控件来显示字段值。列控件默认为文本框

从数据环境创建 利用表格生成器创建

表格项选项卡 样式选项卡 布局选项卡 关系选项卡

交互式创建

修改列标题前已提到,在表格生成器的标题文本框中可以修改列标题。此外还有下面两种方法。a. 用代码修改:例如 Thisform.Gridl.Column2.Headerl.Caption=”名称”,可将表格中第 2 列的标题修改为:名称。b. 在属性窗口对象列表中按照从容器到对象的次序,找到 Headerl 对象后,选择该对象作为当前对象,然后修改其 Caption 属性。

调整表格的行高与列宽a. 调整列宽:表格激活后,将鼠标指针置于表格两列标题之间,这时指针变为带有左右双向箭头的竖条,便可左右拖动列线来改变列宽.另一种方法是设置列的 Width 属性,例如令 Thisform.Gridl.Columnl.Width=50

b. 调整行高:标题栏行和内容行的调整方法略有不同。表格激活后,若调整标题栏高度,可将鼠标指针置于表格标题栏行首按钮的下框线处,当指针变成带有上下双向箭头的横条后,即可上下拖动行线来改变高度。调整内容行高度时,应将鼠标指针置于表格内容第 1行行首按钮的下框线处,然后上下拖动行线来改变行高。此时,所有内容行的高度将统一变化。

若要禁止用户在运行时擅自改变表格标题栏的高度,可将表格的 AllowHeaderSizing 属性设置为 .F. ;若表格的 AllowRowSizing 属性为 .F. ,则禁止改变表格内容行的高度。

列的增删a. 在表格的 ColumnCount 属性中设置表格的列数,

从而改变表格的列数。b. 打开表格生成器,在表格项选项卡中可增加或减少字段。

c. 要删除列,可在属性窗口中选定某列后按 Del 健。

列属性ControlSource :指定某表的某字段作为本列的数据源。CurrentControl :为列指定控件。Spares :取值为 .T.( 默认值 ) 时,在列表中只有选中的单元格以 CurrentControl 指定的控件显示,其它单元格仍以文本框显示。取值为 .F. 时,该列的所有单元格均以 CurrentControl 指定的控件显示。

在数据环境中建立一对多表单的步骤如下:从数据环境设计器的父表中把期望的字段拖动到表单里。从数据环境设计器中把相关的子表拖动到表单里。

表格属性ChildOrder :与父表的主关键字相连接的子表的外部关键字。ColumnCount :列数。如果 ColumnCount 设置为 -1 ,表格的列数与 RecordSource 中的字段数相同。LinkMaster :在表格中显示的子记录的父表。RecordSource :显示在表格中的数据源。RecordSourceType :显示在表格中的数据类型。AllowAddNew :该属性为 .T. 时允许用户向表格中的表添加记录。该属性为 .F.( 默认值 ) 时,只能用 APPEND BLANK 或 INSERT 命令来添加记录。

Page 20: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

20

[例5-6] 设计一个按部门浏览人事表记录的表单。 设计步骤如下:建立一个新表单,为该表单添加数据环境,在数据环境中添加表 BMDM 和表 RSB ,将表 BMDM 的“部门名称”字段从数据环境中拖到表单中,在表单中将出现一个文本框控件,该控件的 ControlSource 属性将自动设置为 BMDM. 部门名称。在 RSB 的标题处按下鼠标拖到表单中,将出现一个表格控件,该控件的 RecordSourceType 属性自动被设置为 1- 别名, RecordSource 属性自动被设置为: RSB 。

在表单中添加一个命令按钮组控件,并设置相应属性使其外观如图 5-20 所示,注意需将“上一条”命令按钮的 Enabled 属性设置为 .F. 。设置命令按钮组的 Click 事件的代码为:

IF This.Value=1 && 如果用户单击了“上一条”命令按钮SKIP -1 &&让表指针向前跳一步

ELSE && 如果用户单击了“下一条”命令按钮SKIP &&让表指针向后跳一步

ENDIF

DO CASE

CASE RECNO()=1 && 如果表指针指向第一条记录 This.Command1.Enabled=.f. && 设置“上一条”命令按钮为不可用CASE RECNO()=RECCOUNT() && 如果表指针指向最后一条记录 This.Command2.Enabled=.f. && 设置“下一条”命令按钮为不可用OTHERWISE && 如果表指针指向中间某条记录 This.Command1.Enabled=.t. && 设置“上一条”命令按钮为可用 This.Command2.Enabled=.t. && 设置“下一条”命令按钮为可用

ENDCASE

Thisform.Refresh &&刷新表单的显示

最后以 fzbd.scx 为文件名保存表单。然后执行表单,当用户单击下一条或上一条时,对于文本框中显示的一个父表的部门名称,在子表中将列出所有属于该部门的职工记录信息,如图 5-21 所示。这是由于我们在两个表之间建立了一对多的关系。

Page 21: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

21

页框控件 页框是一个包含页面的容器对象,用户可在页框中定义多个页面,以生成带选项卡的对话框。

在表单中添加页框控件的步骤为:在表单控制工具栏中单页框控件按钮;移动鼠标指针到表单中,单击并拖拽到合适的大小;

页框的常用属性有:PageCount :设置页框中页面的个数。

页面的常用属性有:Caption :设置页面的名称。

在页框中选择不同页面的步骤如下:在页框中单击鼠标右键,选择编辑,则页框呈现出选中状态,边框变粗;单击要选择的页面标签。

在页面中加入控件的步骤如下:选中要加入控件的页面;在表单控制工具栏中单击所需控件,移动鼠标到所选页面中,单击并拖拽到合适大小。

Page 22: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

22

[例5-7] 建立一个 及 所示含有两个页面的增加及浏览人事数据

的表单。

如图 1 图 2

设计步骤如下:创建一个新表单,向新表单中添加一个页框控件,向表单添加数据环境,数据环保中添加 RSB.DBF 和 BMDM.DBF 两个表文件。注意:必需删除两表间的关系。打开 RSBWH 表单,选中所有控件,单击常用工具栏的【复制】按钮,在页框控件上单击鼠标右键,选择【编辑】菜单项,单击常用工具栏的【粘贴】按钮,并调整控件到合适的位置,如图 1 所示。并将 RSBWH 表单的 Init 事件的代码复制到当前表单的 Init 事件中;将 RSBWH 表单数据环境的 Opentables 和 Closetables 事件的代码复制到当前表单的相应事件中。

将数据环境窗口显示出来,单击页框的第二个页面。拖拽 RSB 表(鼠标指针指向 RSB 的标题行,然后单击并拖拽)到页框的第二个页面上,并调整表格到合适的位置,如图 2 所示。添加 Page1 的 Click 事件的代码为:GO BOTTOM && 确保回到页面 1 时表指针指向最后一条记录。以 ykbd 为文件名保存该表单,然后执行表单,将出现如图 1所示的表单,在表单中单击第二个页面,将显示一个表格,如图 2 所示。表格中列出表的记录。

Page 23: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

23

超级连接 超级链接对象含有一个 NavigateTo 方法程序,它允许用户指定一个网址,执行该方法程序时 Visual FoxPro 就会启动因特网浏览器,并根据指定的网址进入网络的站点来显示网页。

Page 24: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

24

在表单上添加超级链接控件和命令按钮控件各一个。

Commandl 的 Caption 属性设置为:搜狐Commandl 的 Click 事件代码编写如下:Thisform.Hyperlinkl.NavigateTo(“http://www.sohu.com”) &&Hyperlinkl 为超级链接控件的 Name ,括号内为搜狐网站的网址

保存表单并运行,表单名称为“ cjlj” 。

[例5-8] 在表单上创建一个命令按钮,要求表单运行

时单击该命令按钮即可显示搜狐网站的主页。 如图所示

Page 25: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

25

ActiveX 控件 基本概念向表单添加控件或对象

“ 新建”选项按钮 “ 由文件创建”选项按钮“创建控件”选项按钮

向表单控件工具栏添加 AttiveX 控件

添加步骤 显示方法 删除方法

ActiveX原来是微软公司提出的一组技术标准,其中也包括控件的技术标准。所谓 ActiveX 控件,就是指符合ActiveX 标准的控件,其数量现已超过了 1000种,例如在 Windows 的 SYSTEM 文件夹中含有大量带 .OCX扩展名的文件,就都属于 ActiveX 控件。在本章前几节介绍的控件,仅是 ActiveX 控件中常见于 Visual FoxPro界面的一小部分。为了使 Visual FoxPro 能够在需要时利用更多的 ActiveX 控件,在“表单控件”工具栏中设置了一个英文名为Olecontrol 的 ActiveX 控件按钮“”。

从“表单控件”工具栏中选定 ActiveX 控件按钮“”,在表单中单击鼠标,屏幕上将弹出一个如图 5-25 所示的“插入对象”对话框。该控件的功能主要由对话框中的3 个选项按钮决定,【新建】与【由文件创建】选项按钮用于添加 OLE 对象,【创建控件】选项按钮则用于在表单中添加一个 ActiveX 控件。

选定“新建”选项表示将在表单上新建一个对象,这种对象是某种文件类型的文档。在插入对象对话框的对象类型列表中包含文档,图象、声音等多种文件类型,用户选定其中一项并按确定按钮后, Visual FoxPro 将自动打开这种类型的应用程序,供用户输入文档的内容。对话框中有一个【显示为图标】复选框,可用来确定新建的对象以图标显示,还是直接显示文档的内容。若选定该复选框,该文档在表单上显示成一个图标,表单运行时若双击图标, Visual FoxPro 会调用相应的应用程序来打开文档,清除该复选框,表示在表单上直接显示文档内容。

选定【由文件创建】选项按钮表示用户须指定一个存在的文档,并作为对象放置在表单上。选定该选项按钮后,插入对象对话框中将显示一个浏览按钮和一个文本框,用户可通过浏览按钮选一文件,或在文本框中直接输入路径及文件名。按确定按钮后表单窗口内即产生一个文档对象,该文档是以图标显示,还是文件内容显示,可由显示为图标复选框指定。

选定【创建控件】选项按钮表示可由用户指定一个 ActiveX 控件并放置在表单上。选定该选项按钮后,插入对象对话框中将显示【添加控件】按钮,单击该按钮,弹出浏览对话框,指定 Visual FoxPro 的主目录的文件 FPOLE.OCX ,然后选择【打开】,“对象类型”列表中将出现大量 ActiveX 控件选项,这些都是表单控件工具栏以外可供用户选用的控件,用户选定一项后并按确定按钮,指定的 ActiveX 控件就会出现在表单上。

选定【工具】【选项】命令,在如图 5-26 所示的“选项对话框”的【控件】选项卡中选定【 ActiveX 控件】选项按钮,在列表中选定所要添加的若干 OLE 对象和 ActiveX 控件复选框 ( 例如选定 Microsoft Word 文档和Microsoft 公式 3.0) ,单击“设置为默认值”按钮,单击【确定】按钮退出选项对话框。注意,在图 5-26 中,【可插入对象】和【控件】两个复选框默认为选定,此时在选定列表框中同时显示可供插入的对象与 ActiveX 控件。若清除了某一复选框,列表中便将去掉相应部分的选项。

OLE 对象和 ActiveX 控件添加到表单控件工具栏后,还须进行表单控件工具栏显示转换才能显示出来。转换方法如下:在表单控件工具栏中选定查看类按钮,并在随后弹出的菜单中选定【 ActiveX 控件】命令,表单控件工具栏就会自动转换成显示 OLE 对象和 ActiveX控件按钮的工具栏,此后用户就可使用这些按钮在表单上创建对象。图中显示了新增的 Microsoft Word 文档和 Microsoft公式 3.0 两个按钮。若要恢复到原状态,仍须选定查看类按钮,并在弹出菜单中选定【常用】命令即可。

要删除表单控件工具栏中的 OLE 对象按钮或 ActiveX控件按钮,可通过【工具】菜单的【选项】命令来打开“选项对话框”,并在其【控件】选项卡的列表中清除有关复选框便可。

Page 26: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

26

ActiveX 绑定控件 显示通用型字段中的 OLE 对象时,应注意以下三点:

(1) 在表单窗口所创建的 OLE绑定型控件显示为一个含对角线的方框,用户可按需要将它拖至所期望的大小。创建的第 1 个 OLE绑定型控件的 Name 属性默认为 Oleboundcontrol1 。(2)必须将控件与通用型字段绑定。就是说,应该在控件的 ControlSource 属性中设置通用型字段名。(3) 表单运行时,仅当记录指针指向含有数据的通用型字段的记录时; OLE绑定型控件区域内才会显示数据。

OLE 绑定型控制可以用来显示通用字段。建立一个 OLE 绑定对象的步骤如下:

在表单控制工具栏中,选择 OLE绑定型控制按钮;移动鼠标到表单要插入控件的位置,单击鼠标;然后调整其大小;设置对象的 ControlSource 属性将 OLE 对象与通用字段连接起来。

Page 27: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

27

表单参数的传递 表单结果的返回 操作表单控件

命名表单对象 操作表单对象 关闭一个活动的表单

表单管理 给表单传递参数的步骤如下:

在表单上建立属性用来接受参数例如 ItemN 和 IremQ.

在表单的 Init 事件代码中,写入接受参数语句:PARAMETE cStr,nNo

在表单的 Init 事件代码中,把参数赋给属性,如下列:This.ItemN=cStr

This.ItemQ=nNo

当运行表单时,在 DO FORM 命令中包含 WITH 从句。如: DO FORM myform1 WITH "Ball",34

在 DO FORM 命令中使用 NAME子句可以命名表单对象。

例如,以下两条语句运行同一个表单,但是建立了两个不同的表单对象变量:

DO FORM myform3 NAME stu1

DO FORM myform4 NAME stu2

从表单中返回结果的步骤为:设置表单的 WindowType 属性为 1 ,使表单具有模块化的性质。在表单的 Unload 事件代码中,包含 RETURN命令和返回值。在运行表单的程序或方法的 DO FORM 命令中包含关键字 TO 。

如: DO FORM myform2 TO No1

如果在 Command 窗口用 DO FORM 命令来运行表单,则表单对象变量是一个公共变量。可以用变量名来访问表单。 在程序中用 DO FORM 命令运行一个表单,在程序或过程结束之后,对象就消失了,但是表单仍然是可见的。

在命令窗口和程序中可用:表单名 .Release && 表单名是由 DO FORM … NAME < 表单名 > 命令指定的表单名。或 表单文件名 .Release

来关闭并释放表单。

Page 28: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

28

[例5-9] 在 [ 例 5-7] 的表单中增加一个“选项”按钮,用来设置输入表单各项的默认值。 操作步骤如下: 打开 rsbwh 表单,另存为 cscdbd 表单。在表单中添加一个“选项”命令按钮。并在该控件的 Click 事件中添加下列代码:

DIME a(100)

* 取出系统默认的职称FOR i=1 TO This.Parent.Combo4.ListCount

a(i)=This.Parent.Combo4.List(i)

ENDFOR

*将原系统的默认值保存在一组变量里d1=2

d2=This.Parent.Optiongroup1.Value

n1=This.Parent.Spinner1.Value

r1=This.Parent.Spinner2.Value

y1=This.Parent.Combo2.Value

n2=This.Parent.Spinner3.Value

r2=This.Parent.Spinner4.Value

y2=This.Parent.Combo3.Value

DO FORM cscdzb WITH n1,n2,a TO m && 调用子表单,传递参量 n1 、 n2 、 a,返回值 m

IF m && 如果用户在“选项”对话框单击【确定】退出

*清除原系统默认的职称选项FOR i=This.Parent.Combo4.ListCount TO 1 STEP -1

This.Parent.Combo4.RemoveListItem(i)

ENDFOR

* 添加用户设置的职称选项FOR i=1 TO ALEN(a,0)

IF TYPE("a[i]")<>"C"

EXIT

ENDIF

This.Parent.Combo4.AddListItem(a[i],i)

ENDFOR

*将用户设置的默认值存入表单Thisform.d1=d1

Thisform.d2=d2

Thisform.n1=n1

Thisform.r1=r1

Thisform.y1=y1

Thisform.n2=n2

Thisform.r2=r2

Thisform.y2=y2

Thisform.szcs() && 调用自定义方法设置用户定义的默认值ENDIF

定义上面代码用到的 5 个表单属性,和一个用户自定义方法 szcs( )(请参阅 6.5 节),并设置属性值为: Thisform.d1 : 0 ; Thisform.d2 : 1 ; Thisform.n1 : 1960 ; Thisform.r1 : 1949 ; Thisform.y1 : 1 ; Thisform.n2 : 1 ; Thisform.r2 : 1 ; Thisform.y2 : 1 。并设置方法 szcs( ) 的代码为:

* 按用户设置,设置默认值IF This.d1=1

This.chk婚否 .Value=1

ELSE

This.chk婚否 .Value=0

ENDIF

This.Optiongroup1.Value=This.d2

This.Spinner1.Value=This.n1

This.Spinner2.Value=This.r1

This.Combo2.Value=This.y1

This.Spinner3.Value=This.n2

This.Spinner4.Value=This.r2

This.Combo3.Value=This.y2

并在保存命令按钮的 Click 事件中增加一行代码:Thisform.szcs() && 调用自定义方法设置用户定义的默认值

放在原代码倒数第一行的前面。

新建一个名为 cscdzb 的表单,并添加五个标签控件,一个文本框控件,两个单选框控件,一个列表框控件,两个命令按钮控件。并将 cscdbd 表单的输入日期的控件的组合复制过来,复制两次,设置成图 5-25 所示的外观。

属性设置:除了设置表单属性使外观如图所示外,还需设置列表框的属性 MultiSelect 的值为: .T.- 真。并设置表单的属性 WindosType 的值为: 1 ,这一点非常重要。定义一个表单属性,取名为:t 。

代码设置:设置表单 Init 事件的代码为:设置表单 Unload 事件的代码为:设置文本框的 KeyPress 事件的代码为:设置列表框的 KeyPress 事件的代码为:设置【确定】命令按钮的 Click 事件的代码为:设置“取消”命令按钮的 Click 事件的代码为:

PARAMETE n1,n2,zc && 接收参数说明语句*将系统默认值带到选项设置窗口This.Spinner1.Value=n1

This.Spinner3.Value=n2

FOR i=1 TO ALEN(zc,0)

IF TYPE("zc[i]")<>"C"

EXIT

ENDIF

This.List1.AddListItem(zc[i],i) &&将系统默认的职称选项添加到列表框

ENDFOR

RETURN Thisform.t && 表单的返回值

IF nKeyCOde=13 && 如果用户按了回车键* 判断输入项在列表中是否存在 t=.F.

FOR i=1 TO This.Parent.List1.ListCount

IF ALLTRIM(This.Value)==ALLTRIM(This.Parent.List1.List(i))

t=.T. && 列表中存在该项 EXIT

ENDIF

ENDFOR

IF !t && 如果列表中不存在该项 This.Parent.List1.AddListItem(This.Value) &&将该

项添加到列表中 ELSE

MESSAGEBOX(" 该项已存在!请重新输入! ") &&否则输出 " 该项已存在!请重新输入! "

ENDIF

This.Value="" &&清空文本框Thisform.Refresh()

ENDIF

IF nKeyCOde=7 && 如果用户按了 Del 键FOR i=1 to This.ListCount

IF This.Selected(i)

This.RemoveListItem(i) &&删除所有选中的项ENDIF

ENDFOR

ENDIF

Thisform.t=.T. && 表明用户单击【确定】退出该对话框*将用户设置的默认值保存在主从型变量中,从而带回主程序d1=This.Parent.Optiongroup2.Value

d2=This.Parent.Optiongroup1.Value

n1=This.Parent.Spinner1.Value

r1=This.Parent.Spinner2.Value

y1=This.Parent.Combo2.Value

n2=This.Parent.Spinner3.Value

r2=This.Parent.Spinner4.Value

y2=This.Parent.Combo1.Value

*清空数组 a 原有的数据FOR i=1 TO 100

a(i)=.F.

ENDFOR

*将用户设置的职称默认值保存在 a 数组中FOR i=1 TO This.Parent.List1.ListCount

a(i)=This.Parent.List1.List(i)

ENDFOR

Thisform.Release

Thisform.t=.F. && 用户单击取消退出该对话框Thisform.Release

Page 29: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

29

5.3 多表单应用程序 5.3.1 MDI 文档界面1. 多文档界面与单文档界面的概念 多文档界面( Multiple-Document Interface ,简称 MDI )是指

应用程序主窗口中能包含多个应用程序窗口。 单文档界面( Single-Document Interface ,简称 SDI )是指应

用程序窗口只允许显示和操作一个文档,此文档直接显示在应用程序窗口内。

2. MDI 文档界面的设计 表单类型:顶层表单、子表单和浮动表单 顶层表单:是一个没有父表单的独立表单。 子表单:用于创建 MDI 应用程序的文档窗口,它包含在另一个主

窗口中。 浮动表单:是由子表单变化而来的,它属于父表单的一部分,但并

不是包含在父表单中。

Page 30: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

30

表单类型

Page 31: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

31

表单类型设定1 )顶层表单设定:在“表单设计器”中将表单的 ShowWindow 属性设置为“ 2 - 作为顶层表单”。

2 )子表单设定:将表单的 ShowWindow 属性设置为下列值之一:0 - 在屏幕中 ( 默认 ) 。1 - 在顶层表单中。

3 )浮动表单设定:先将表单的 ShowWindow 属性设为 0 或 1 (即子表单),然后设置Desktop 属性值为 .T. 。

Page 32: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

32

MDI 应用程序的建立建立 MDI 应用程序的步骤:1 )建立顶层表单;2 )建立相关的子表单;3 )在顶层表单中调用子表单。

3. MDI窗口之间的参数传递命令格式:DO FORM <子表单名 > [WITH < 实参表 >] [TO <内存变量 >

]

功能:主表单与子表单相互传递数据。说明:( 1 ) WITH < 实参表 >子句由主表单向子表单传递数据。( 2 ) TO <内存变量 >子句从子表单返回的值存入到 <内存变量 > 中。

Page 33: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

33

( 3 )在子表单的 Init 事件代码中应该有如下代码来接受主表单中 WITH < 实参表 > 的数据: PARAMETERS <形参表 >

< 实参表 > 和 <形参表 > 中的参数用逗号分隔, <形参表 > 中的参数数目不能少于 < 实参表 > 中的参数数目。多余的参数变量赋值为 .F. 。 主表单带参数调用子表单,要求子表单 WindowtType 属性值要设为 1-模式表单。

[ 例 5-10] 创建如下所示的顶层表单以及子表单,要求用户从子表单中输入的圆半径值,在主表单中求出相应的圆周长和圆面积。

Page 34: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

34

Page 35: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

35

设计步骤:1.设计主表单( circle.scx ) 新建表单,进入表单设计器,增加 4 个标签, 3 个文本框和 2 个命令按钮。 编写程序代码:编写【输入半径】按钮 Command1 的 Click 事件代码:bj=THISFORM.Text3.ValueDO FORM radius WITH bj TO rTHISFORM.Text1.Value=2*pi()*rTHISFORM.Text2.Value=pi()*r^2THISFORM.Text3.Value=r

2.设计子表单( radius.scx ) 新建表单,进入表单设计器,增加 1 个标签, 1 个文本框和 1 个命令按钮。用户定义属性: R ,初始值为 0 。编写程序代码:radius.scx 表单的 Init 事件代码:PARAMETERS bj

主表单向子表单传递数据

Page 36: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

36

radius.scx 表单的 Activate 事件代码:THISFORM.Text1.Setfocus

radius.scx 表单的 Unload 事件代码:RETURN THISFORM.R

编写【确定】按钮 Command1 的 Click 事件代码:THISFORM.R=THISFORM.Text1.Value

THISFORM.Release

带参返回调用

Page 37: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

37

5.3.2 表单集 表单集( Formset )是一个容器,其中可包含多个表单,并将这些表单作为一个组进行操作。 表单集具有以下优点:( 1 )可同时显示和隐藏表单集中的表单。( 2 )能可视化地调整各个表单的相对位置。( 3 )由于表单集及其所有的表单都存储在同一个 .SCX 文件中,因而共享一个数据环境,数据表关联后,在一个表单中的父表移动记录指针,在另一个表单中的子表的记录指针也相应移动。( 4 )运行表单集时,将加载表单集中所有表单和表单的所有对象。

Page 38: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

38

1.表单集的建立及相关操作打开“表单设计器”,从【表单】菜单中,选择【创建表单集】命令,即可建立一个新的表单集 Formset1 ,它在“属性”窗口的对象列表中。 添加新表单:主菜单的【表单】菜单,选择【添加新表单】命令 删除表单:首先选择要删除的表单,然后从主菜单的【表单】菜单,选择【移除表单】命令,删除选定的表单。 删除表单集:如果表单集中只剩一个表单,则可删除表单集。 表单集的释放:命令 RELEASE THISFORMSET 或设置为随最后一个表单的释放而自动释放,此时表单集的 AutoRel

ease 属性为 .T. 。

Page 39: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

39

[ 例 5-11] 利用表单集建立如下所示增资情况查询表单 zzcx.scx 。

Page 40: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

40

步骤 1 :新建表单集 zzcx.scx

步骤 2 :向表单集添加新表单 步骤 3 :设置数据环境步骤 4 :设置 Form1 和 Form2 表单( 1 )设置 Form1 :将数据环境中 rsb.dbf窗口的标题栏拖放到 Form1 表单中,产生一个人事表表格。在表格的上方添加 1 个标签和 1 个命令按钮。编写【结束】按钮 Command1 的 Click 事件代码:RELEASE THISFORMSET

( 2 )设置 Form2 :将数据环境中 zz.dbf窗口的标题栏拖放到 Form1 表单中,产生一个增加工资的表格。

Page 41: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

41

5.4 类 5.4.1 基本概念1.类的基本概念类( class ) :类是对一组具有相同属性和方法的对象的抽象,是对象的原型。 对象( object ) :是将数据和对该数据的所有必要操作的代码封装起来的程序模块,即对象是包含属性(数据)和行为(方法)的逻辑实体。

基类( base class ) :基类是 VFP系统定义的类,它是用户创建新类的基础。

Page 42: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

42

父类( parent class )和子类( subclass ):以某个类的定义为起点派生出来的新类称为子类,前者称为父类。子类将继承父类的全部特征。

用户定义类( user-defined class ) :是指由基类派生出来的子类, VFP 还允许从用户定义类再派生出子类,因此用户定义类可以是子类,也可作为父类。

容器类( container classes )和控件类( control clases ):

类库( class library ):类库是用来存储以可视方式设计的类的文件,其文件扩展名为 .VCX 。

Page 43: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

43

2.类的特征类的继承性:是指用户可以通过已经存在的类来构造出新类,新类继承该类的所有属性和事件,并加以扩充。

类的封装性 :封装就是指将对象的方法程序和属性代码包装在一起。类的封装性指类的内部信息对于用户是屏蔽的,内部的复杂性可以被隐藏起来,仅保留出封装的外部接口。

类的多态性:所谓类的多态性,指在类的层次结构中,各层中的对象对同名方法程序或属性的调用是不同的,进而产生完全不同的行为。

Page 44: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

44

5.4.2 用户定义类用户也可以在已有基类的基础上,创建自己的子类——用户定义类。1.建立用户定义类创建步骤: 步骤一:打开“新建类”对话框:菜单【文件】→【新建】命令→在“新建”对话框中,选择【类】,然后单击【新建文件】按钮。 步骤二:在“新建类”对话框中设定新建类的类名、父类和类库:步骤三:在“类设计器”窗口中进行设置操作:“类设计器”窗口与“表单设计器”窗口相同,在“属性”窗口中可以查看和编辑类的属性,在“代码”编辑窗口中可以编写各种事件和方法程序的代码。

Page 45: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

45

输入要创建的类名

指定新类从哪个类派生出来的。可以从列表框中选择系统给出的基类。

用于输入新类库名或指定已有库类的名字。

Page 46: 其它控件介绍 表单管理  多表单应用程序  类  建立工具栏

46

[ 例 5-12] 新建一个带“退出”按钮的用户定义类,它继承命令按钮( CommandButton )基类,类名为“退出”,存于新类库名mylib.vcx 中。 步骤一:打开“新建类”对话框:在命令窗口中使用命令:CREATE CLASS

步骤二:设置“新建类”对话框:在“类名”文本框中输入退出,在“派生于”下拉列表中选择 CommandButton 作为基类,在“存储于”文本框中输入mylib.vcx 。步骤三:设置“退出”类属性与事件:在“类设计器”中,设置退出类的 Caption 属性值由“ Command1”改为“退出”,然后再双击这个“退出”按钮,打开代码输入窗口,为 Click 事件编写如下代码:THISFORM.Release