




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
其它控件介绍表单管理多表单应用程序类建立工具栏1表单设计的基本步骤为:打开表单设计器向表单添加控件设置表单及控件的属性添加表单及控件的事件代码保存表单运行及调试表单。2其它控件介绍控件的通用属性命令按钮组控件编辑框复选框和单选框列表框和组合框微调控件表格和页框超级连接ActiveX控件和ActiveX绑定控件3控件的通用属性Enabled属性Visible属性以Font打头的一组属性为多个对象设置共同属性这一属性是除“超级连接”之外的所有控件及表单都有的属性,其值可设置为:.T.-真或.F.-假,指定表单或控件能否响应由用户引发的事件。只有“计时器”控件的这一属性的含义不同,请参阅6.6.3节。这一属性是除“超级连接”和“计时器”之外的所有运行时可见的控件及表单都有的属性,其值可设置为:.T.-真或.F.-假,指定运行时对象是可见还是隐藏。
FontSize:定义字的大小;FontName:定义文本的字体;FontColor:定义字的颜色;Fontbold:定义文字是否粗体;FontItalic:定义文字是否斜体;这组属性是许多可有文字的对象都有的属性,如:表单、标签控件、命令按钮控件、文本框控件、表格控件、列表框控件等等。
按住Shift健分别单击若干对象,用来选取需设置属性的对象,属性窗口的对象组合框中将会显示“多重选定”文本,此时便可在属性窗口为这些对象设置共同属性,例如:设置FontSize属性改变文字大小。
4命令按钮组控件命令按钮组控件是一个容器控件,它可包含若干个命令按钮,并能统一管理这些命令按钮,命令按钮组与组内的各命令按钮都有自己的属性,事件和方法程序,因而既可单独操作各命令按钮,也可对组控件进行操作。命令按钮组的生成器命令按钮组及其命令按钮的操作按钮选项卡(1)微调控件:指定命令按钮组中的按钮数,对应于命令按钮组的ButtonCount属性(2)表格:包含标题和图形两列。标题列对应于命令按钮的Caption属性,命令按钮可以具有标题或图象,或两者都有。图形列对应于命令按钮的Picture属性。命令按钮会自动调整大小,以容纳新的标题和图片,组容器也会自动调整大小。布局选项卡(1)按钮布局:指定命令按钮组内的按钮按竖直方向或水平方向排列。(2)按钮间隔:指定按钮之间的间隔。上述两项将影响命令按钮组的Height和Width属性。(3)边框样式:指定命令按钮组有单线边栏或无边框。Click事件的判别容器中对象的引用容器及其对象的编辑常用命令按钮组的属性有:ButtonCount:设置组中命令按钮的数目。BackStyle:设置命令按钮的背景是否透明。BorderStyle:定义命令按钮组的边框。(2)单击某命令按钮时,组控件的Value属性就会获得一个数值或字符串:当Value属性为1(默认值)时,将获得命令按钮的顺序号,它是一个数值;而当Value属性设置为空时,将获得命令按钮的Caption值,它是字符串。于是在命令按钮组的Click事件代码中便可判别出单击的是哪个命令按钮,并决定执行的动作。(1)若命令按钮组及其所含的各命令按钮分别设置了Click事件代码,VisualFoxPro将以命令按钮的Click事件代码优先。例如引用命令按钮组中的命令按钮,Thisform.Commandgroupl.Commandl或This.Commandl。
(1)容器本身的编辑:设计时若在表单上选定容器,就可编辑该容器的属性、事件代码与方法程序,但不能编辑容器中的对象。
(2)容器中对象的编辑:要编辑容器中的对象,须先激活容器。激活的方法是选定容器的快捷菜单中的【编辑】命令,容器被激活的标志是其四周显示一个斜线边框,如图所示。容器激活后,用户便可选定其中的对象进行编辑。5操作步骤如下:计算器的按钮部分用命令按钮组控件进行设计。向表单添加一个命令按钮组控件,在命令按钮组控件上单击右键,选择【生成器】,在按钮选项卡中设置按钮数目为16,并设置标题。然后在“布局”页面中设置“按钮布局”为:水平。单击【确定】按钮,关闭生成器。设置命令按钮组控件的Height属性值为140,在命令按钮组控件上单击右键,选择【编辑】,移动命令按钮,将所有命令按钮的height和Widdth均设置为:25,设置成的状态。其它部分外观的设计同[例6-10],可以从[例6-10]的表单中复制过来。[例5-1]用命令按钮组设计计算器。设置命令按钮组控件Commandgroup1的Value属性值为:=“”这一步骤非常重要,如没有这一步,计算器的设置要复杂得多。在命令按钮组控件Commandgroup1的Click事件添加下列代码:IFThisform.tAND(asc(This.Value)>=45ANDASC(This.Value)<=57)Thisform.Text1.Value=""&&清空文本框内容ENDIFIFThis.Value="="&&如果单击了“=”按钮
x=Thisform.Text1.ValueThisform.Text1.Value=str(&x,50,6)Thisform.t=.T.ELSE&&如果单击了除“=”以外的按钮
Thisform.Text1.Value=Thisform.Text1.Value+This.Value
Thisform.t=.F.ENDIF如图所示如图所示6编辑框在编辑框中可以编辑长字符字段或备注字段中的文本。编辑框中允许输入多段文本,也可以使用方向键、PageUp键、PageDown键、滚动条来移动文本。编辑框只能处理字符型数据。编辑框的常用属性有:AllowTabs:设置用户是否可以在编辑框中用Tab键前后移动。如果允许,应明确地指出用户可以通过按Ctrl+Tab移到下一个控件。ControlSource:设置将哪一个数据库的表的那个字段的值显示在编辑框中。HideSelection:当编辑框没有焦点时选定文本是否以选定状态显示。
ReadOnly:设置用户是否可以改变编辑框的文本。
ScrollBars:设置是否显示垂直滚动条。
SelLength:返回用户在控制的文本区域中选定的字符数目,或指定要选定的字符数目。SelStart:返回控件的文本输入区域中用户选择文本的起始点。当没有选定文本时,指示插入点的位置。另外,它还可以指定控件的文本输入区域中选择的文本起始点。
SelText:返回用户选定的文本,如果没有选定任何文本,则返回空字符串("")。或指定包含选定文本的字符串。
7[例5-2]建立一个表单,其外观如图所示并完成下列功能:编辑框与某表文件的的备注型字段绑定;执行表单后,用户选择编辑框的内容,单击【确定】按钮,选定的内容将在右边的文本框中出现。操作步骤如下:先作准备工作,建立一个名为WBKLB.DBF的表文件,包含一个字段,字段名为:NR,类型为:M,并输入一条记录的内容,内容可从某个已有的文件或帮助中复制过来。新建一个表单,设置表单的Caption属性值为:编辑框实例;为表单设置数据环境,在数据环境中添加表WBKLB.DBF;在表单中添加一个编辑框控件,一个文本框控件,设置编辑框的ControlSourc属性为:WBKLB.NR;再在表单中添加一个命令按钮控件,设置该控件的Caption属性为:确定;Click事件代码为:Thisform.Text1.Value=Thisform.Edit1.Seltext8复选框和单选框复选框与选项按钮(又译单选框)是对话框中的常见对象,复选框允许同时选择多项,选项按钮则只能在多个选项中选择其中的一项。所以复选框可以在表单中独立存在,选项按钮只能存在于它的容器选项按钮组中。复选框控件选项按钮组控件9复选框控件复选框控件用于指定布尔状态:真或假,开或关,打开或关闭。复选框的常用属性有:Caption:该属性的值用来定义复选框的标题,即说明该复选框的功能。ControlSource:该属性值指定与该复选框对象绑定的数据源。Value:指定复选框的状态。Value属性的设置有:设置 说明0 (默认值)未选定。1选定。2 灰色,该设置只在代码中可用。Style:该属性的值用来定义复选框的外观,有:0-标准、1-图形两种可选值。10选项按钮组控件选项按钮组常用来表示在一组可选的项目中,同一时刻有且仅有一项可以被选中。在选项按钮组控件上单击鼠标右键,然后选择【编辑】,可以对选项组中的每一个选项按钮进行属性和事件代码的设置。选项组常用的属性有:ButtonCount:设置组中选项的数目。BackStyle:设置选项组的背景是否透明。BorderStyle:定义选项组的边框。Value:表示被选中的按钮序号,默认值为1。选项的常用属性有:Caption:定义选项的说明。Value:设置选项是否被选中,1表示选中,0表示未选中。Style:该属性的值用来定义单选框的外观,有:0-标准、1-图形两种可选值。选项按钮组控件也有生成器,用法同命令按钮组类似。这里不再详述,请看下面的例题。11[例5-3]
建立一个表单,其外观并完成下列功能:表单被执行时按图所示的格式显示日期和时间;当用户改变格式设置时,立刻按用户设置的格式显示日期和时间;操作步骤如下:新建一个表单,添加五个标签控件、两个文本框控件、两个选项按钮组,两个复选框控件、两个形状控件、一个计时器控件,并设置相应属性,使其外观如图5-6所示,两个形状控件必须设置为“置后”。设置控件的关键属性,设置计时器控件的Interval属性值为:10;设置两个文本框的TabStop属性值为:.F.-假;上面文本框的Width属性值为:240;下面文本框的Width属性值为:210;其它属性值读者可参照已确定的属性值及图5-6的相对位置自定。在计时器控件的time事件中添加以下代码:IFThis.Parent.check1.Value=1 DOCASE CASEThis.Parent.Optiongroup1.Value=1 SETDATETOYMDCASEThis.Parent.Optiongroup1.Value=2 SETDATETOMDY CASEThis.Parent.Optiongroup1.Value=3 SETDATETODMY ENDCASEx=DOW(DATE())&&用DOW()函数获取当前日期的星期数DOCASE CASEx=1&&如果是星期日
y="日"
CASEx=2&&如果是星期一
y="一"
CASEx=3&&如果是星期二
y="二"
CASEx=4&&如果是星期三
y="三"
CASEx=5&&如果是星期四
y="四"
CASEx=6&&如果是星期五
y="五"
CASEx=7&&如果是星期六
y="六"ENDCASEThis.Parent.Text1.Value=DTOC(DATE())+"星期"+yELSEDOCASE CASEThis.Parent.Optiongroup1.Value=1 This.Parent.Text1.DateFormat=12 CASEThis.Parent.Optiongroup1.Value=2 This.Parent.Text1.DateFormat=10 CASEThis.Parent.Optiongroup1.Value=3 This.Parent.Text1.DateFormat=11ENDCASEThis.Parent.text1.Value=DATE()ENDIF
IFThis.Parent.Optiongroup2.Value=1 SETHOURSTO12 This.Parent.text2.Width=210 *根据当前时间确定是上午,还是下午
IFhour(DATETIME())>12 This.Parent.label5.Caption="下午"
ELSE This.Parent.label5.Caption="上午"
ENDIFELSE&&如果用户选择24小时制
SETHOURSTO24 This.Parent.text2.Width=241ENDIFIFThis.Parent.check2.Value=1 This.Parent.text2.Value=SUBSTR(TTOC(DATETIME()),10,5)ELSE&&如果用户选择不显示秒
This.Parent.text2.Value=SUBSTR(TTOC(DATETIME()),10,5)ENDIF
如图所示12列表框和组合框列表框与组合框都有一个供用户选项的列表,但两者之间有两个区别:(1)列表框任何时候都显示它的列表,而组合框平时只显示一个项,待用户单击它的向下按钮后才能显示可滚动的下拉列表。若要节省空间,并且突出当前选定的项时可使用组合框。(2)组合框又分下拉组合框与下拉列表框两类,前者允许键入数据项;而列表框与下拉列表框都仅有选项功能。13列表框控件生成器列表框生成器含有列表项、布局、样式、值等4个选项卡,用于为列表框设置各种属性。列表项选项卡样式选项卡布局选项卡值选项卡控件值源的类型列表框的常用属性列表项选项卡该选项卡用于指定要填充到列表框中的项。填充项可以是3种类型数据之一:表或视图中的字段、手工输入的数据或数组中的值。表或视图中的字段
手工输入数据数组中的值
样式选项卡该选项卡用于指定列表框的样式,所显示的行数,要否递增搜索。下面仅说明显示行数的设置。“要显示的行数”微调控件用来调整列表框的显示行数,但是仅在文本选取7号字时所设置的行数与实际项数相符。原因是该微调控件的设置实际上改变了列表框的Height属性,而VisualFoxPro则按象素来指定高度。布局选项卡布局选项卡含有1个复选框和1个表格,用于控制列表框的列宽和显示。1)“调整列表框的宽度来显示所有列”复选框:该选项自动设置了Width属性,能根据列表项选项卡中微调控件指定的列数自动调整列表框的宽度。2)表格:表格中显示了在列表项选项卡中定义的列,并可用鼠标拖动列标头右边的列间隔线来调整列宽,相当于修改了Co1umnWidths属性。双击列标头还可隐藏该列,使得表单执行时该列不显示,但其数据仍起作用。值选项卡值选项卡包含两个组合框,分别用来指定返回值的列以及存储返回值的字段。1)“从哪一列中返回值”组合框:该组合框的操作对应于BoundColumn属性。组合框列表中包含字段名或表示列号的选项,供用户决定列表框返回值的字段或列。2)字段名组合框:该组合框的操作对应于ControlSource属性,用来指定存储返回值的字段。控件值源的类型列表框和组合框的列表中可以填充各类数据,在上述的列表框生成器中,已涉及值,数组和字段3种类型,实际上共有9类.它们均由RowSourceType属性来指定,RowSourceType
属性的可取值如表5-1所示:列表框的常用属性MoverBars:设置列表框的左侧是否显示移动按钮。MultiSelect:设置用户是否可以同时在列表中选择多项。Value:返回列表框中选定的项,如果有多列,返回由BoundColumn属性指定的列的内容。DisplayValue:返回列表框中选定的项第一列的内容。14[例5-4]
设计一个表单,实现的简易数学用表。原数取1~100。操作步骤如下:新建一个表单,向表单添加五个标签控件,一个列表框控件,并设置相关属性。设置列表框控件List1的属性ColumnCount的值为5,说明含有5列;属性ColumnWidth的值为:30,40,50,50,150,确定5列各自的宽度。在控件List1的Init事件中添加如下代码:FORi=1to100 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如图所示15组合框控件组合框是列表框和文本框的组合。组合框有两种类型:下拉式组合框,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)本属性设计时不可用,运行时可读写。
16微调控件微调控件的常用属性有:Increment:用户点按向上或向下按钮时每次增大或减小的值。KeyboardHighValue:能输入到微调控件文本框中的最大值。KeyboardLowValue:能输入到微调控件文本框中的最小值。SpinnerHighValue:用户按向上按钮时能达到的最大值。SpinnerLowValue:用户按向下按钮时能达到的最小值。Value:返回用户设置的值。17[例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,1949,1作为默认值。
对于“职称”字段,也需作处理,为给用户提供更方便的输入界面,删除与“职称”绑定的文本框,添加一个组合框控件,在组合框上单击鼠标右键,选择【生成器】,对“列表项”页面设置成如图5-15所示,对“值”页面设置成如图5-19所示,其它两个页面不变,最后单击【确定】确认设置。对于“相片”字段,也需作处理,为美观起见,添加一个形状控件,使其置后,并设置成三维。为给用户提供更方便的输入界面,添加一个命令按钮,将命令按钮的外观设置成如图5-13所示,相片标签下的命令按钮形状,并设置该命令按钮的Click事件的代码为:filename=GETPICT()&&利用getpict()函数打开选择图片的对话框APPENDGENERAL相片FROM&filename&&将选取的图片放到当前记录的相片字段中Thisform.Refresh()&&刷新表单的显示,目的是让刚选的图显示出来
调整各控件的位置如图5-13所示,添加两个线条控件、两个命令按钮控件,线条的颜色一条设置成深灰、一条设置成白色,两条紧埃着,形成立体效果。添加控件代码:Init事件代码
“保存”按钮的Click事件代码
“取消退出”命令按钮的Click事件代码
四个组合框控件的Init事件代码
选项按钮组的Click事件的代码
与职称绑定组合框控件的LostFocus事件的代码
18表格控件VisualFoxPro提供了一个强大的工具来显示和操作多行数据,这就是表格。表格是一个容器对象,像表单集能包含多个表单一样,它可以包含多个列。另外,列可以包含表头和控件,并且每一部分都有自己的属性、事件和方法。表格的组成在表单窗口添加表格控件表格编辑表格的常用属性用表格控件建立一对多表单(1)表格(Grid):由一或若干列组成.(2)列(Column):一列可显示表的一个字段,列由列标题和列控件组成。(3)列标题(例如:Headerl):默认显示字段名,允许修改。(4)列控件(例如:Textl);一列必须设置一个列控件,该列中的每个单元格都可用此控件来显示字段值。列控件默认为文本框从数据环境创建
利用表格生成器创建
表格项选项卡
样式选项卡
布局选项卡
关系选项卡
交互式创建修改列标题前已提到,在表格生成器的标题文本框中可以修改列标题。此外还有下面两种方法。a.用代码修改:例如Thisform.Gridl.Column2.Headerl.Caption=”名称”,可将表格中第2列的标题修改为:名称。b.在属性窗口对象列表中按照从容器到对象的次序,找到Headerl对象后,选择该对象作为当前对象,然后修改其Caption属性。
调整表格的行高与列宽a.调整列宽:表格激活后,将鼠标指针置于表格两列标题之间,这时指针变为带有左右双向箭头的竖条,便可左右拖动列线来改变列宽.另一种方法是设置列的Width属性,例如令Thisform.Gridl.Columnl.Width=50b.调整行高:标题栏行和内容行的调整方法略有不同。表格激活后,若调整标题栏高度,可将鼠标指针置于表格标题栏行首按钮的下框线处,当指针变成带有上下双向箭头的横条后,即可上下拖动行线来改变高度。调整内容行高度时,应将鼠标指针置于表格内容第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.(默认值)时,只能用APPENDBLANK或INSERT命令来添加记录。19[例5-6]设计一个按部门浏览人事表记录的表单。设计步骤如下:建立一个新表单,为该表单添加数据环境,在数据环境中添加表BMDM和表RSB,将表BMDM的“部门名称”字段从数据环境中拖到表单中,在表单中将出现一个文本框控件,该控件的ControlSource属性将自动设置为BMDM.部门名称。在RSB的标题处按下鼠标拖到表单中,将出现一个表格控件,该控件的RecordSourceType属性自动被设置为1-别名,RecordSource属性自动被设置为:RSB。在表单中添加一个命令按钮组控件,并设置相应属性使其外观如图5-20所示,注意需将“上一条”命令按钮的Enabled属性设置为.F.。设置命令按钮组的Click事件的代码为:IFThis.Value=1&&如果用户单击了“上一条”命令按钮
SKIP-1&&让表指针向前跳一步ELSE&&如果用户单击了“下一条”命令按钮
SKIP&&让表指针向后跳一步ENDIFDOCASE CASERECNO()=1&&如果表指针指向第一条记录
This.Command1.Enabled=.f.&&设置“上一条”命令按钮为不可用
CASERECNO()=RECCOUNT()&&如果表指针指向最后一条记录
This.Command2.Enabled=.f.&&设置“下一条”命令按钮为不可用
OTHERWISE&&如果表指针指向中间某条记录
This.Command1.Enabled=.t.&&设置“上一条”命令按钮为可用
This.Command2.Enabled=.t.&&设置“下一条”命令按钮为可用ENDCASEThisform.Refresh&&刷新表单的显示最后以fzbd.scx为文件名保存表单。然后执行表单,当用户单击下一条或上一条时,对于文本框中显示的一个父表的部门名称,在子表中将列出所有属于该部门的职工记录信息,如图5-21所示。这是由于我们在两个表之间建立了一对多的关系。20页框控件页框是一个包含页面的容器对象,用户可在页框中定义多个页面,以生成带选项卡的对话框。在表单中添加页框控件的步骤为:在表单控制工具栏中单页框控件按钮;移动鼠标指针到表单中,单击并拖拽到合适的大小;页框的常用属性有:PageCount:设置页框中页面的个数。页面的常用属性有:Caption:设置页面的名称。在页框中选择不同页面的步骤如下:在页框中单击鼠标右键,选择编辑,则页框呈现出选中状态,边框变粗;单击要选择的页面标签。在页面中加入控件的步骤如下:选中要加入控件的页面;在表单控制工具栏中单击所需控件,移动鼠标到所选页面中,单击并拖拽到合适大小。21[例5-7]建立一个及所示含有两个页面的增加及浏览人事数据的表单。
如图1图2设计步骤如下:创建一个新表单,向新表单中添加一个页框控件,向表单添加数据环境,数据环保中添加RSB.DBF和BMDM.DBF两个表文件。注意:必需删除两表间的关系。打开RSBWH表单,选中所有控件,单击常用工具栏的【复制】按钮,在页框控件上单击鼠标右键,选择【编辑】菜单项,单击常用工具栏的【粘贴】按钮,并调整控件到合适的位置,如图1所示。并将RSBWH表单的Init事件的代码复制到当前表单的Init事件中;将RSBWH表单数据环境的Opentables和Closetables事件的代码复制到当前表单的相应事件中。将数据环境窗口显示出来,单击页框的第二个页面。拖拽RSB表(鼠标指针指向RSB的标题行,然后单击并拖拽)到页框的第二个页面上,并调整表格到合适的位置,如图2所示。添加Page1的Click事件的代码为:GOBOTTOM&&确保回到页面1时表指针指向最后一条记录。以ykbd为文件名保存该表单,然后执行表单,将出现如图1所示的表单,在表单中单击第二个页面,将显示一个表格,如图2所示。表格中列出表的记录。22超级连接超级链接对象含有一个NavigateTo方法程序,它允许用户指定一个网址,执行该方法程序时VisualFoxPro就会启动因特网浏览器,并根据指定的网址进入网络的站点来显示网页。23在表单上添加超级链接控件和命令按钮控件各一个。Commandl的Caption属性设置为:搜狐Commandl的Click事件代码编写如下:Thisform.Hyperlinkl.NavigateTo(“”)&&Hyperlinkl为超级链接控件的Name,括号内为搜狐网站的网址保存表单并运行,表单名称为“cjlj”。[例5-8]在表单上创建一个命令按钮,要求表单运行时单击该命令按钮即可显示搜狐网站的主页。
如图所示24ActiveX控件基本概念向表单添加控件或对象
“新建”选项按钮“由文件创建”选项按钮“创建控件”选项按钮
向表单控件工具栏添加AttiveX控件
添加步骤显示方法
删除方法
ActiveX原来是微软公司提出的一组技术标准,其中也包括控件的技术标准。所谓ActiveX控件,就是指符合ActiveX标准的控件,其数量现已超过了1000种,例如在Windows的SYSTEM文件夹中含有大量带.OCX扩展名的文件,就都属于ActiveX控件。在本章前几节介绍的控件,仅是ActiveX控件中常见于VisualFoxPro界面的一小部分。为了使VisualFoxPro能够在需要时利用更多的ActiveX控件,在“表单控件”工具栏中设置了一个英文名为Olecontrol的ActiveX控件按钮“”。
从“表单控件”工具栏中选定ActiveX控件按钮“”,在表单中单击鼠标,屏幕上将弹出一个如图5-25所示的“插入对象”对话框。该控件的功能主要由对话框中的3个选项按钮决定,【新建】与【由文件创建】选项按钮用于添加OLE对象,【创建控件】选项按钮则用于在表单中添加一个ActiveX控件。选定“新建”选项表示将在表单上新建一个对象,这种对象是某种文件类型的文档。在插入对象对话框的对象类型列表中包含文档,图象、声音等多种文件类型,用户选定其中一项并按确定按钮后,VisualFoxPro将自动打开这种类型的应用程序,供用户输入文档的内容。对话框中有一个【显示为图标】复选框,可用来确定新建的对象以图标显示,还是直接显示文档的内容。若选定该复选框,该文档在表单上显示成一个图标,表单运行时若双击图标,VisualFoxPro会调用相应的应用程序来打开文档,清除该复选框,表示在表单上直接显示文档内容。选定【由文件创建】选项按钮表示用户须指定一个存在的文档,并作为对象放置在表单上。选定该选项按钮后,插入对象对话框中将显示一个浏览按钮和一个文本框,用户可通过浏览按钮选一文件,或在文本框中直接输入路径及文件名。按确定按钮后表单窗口内即产生一个文档对象,该文档是以图标显示,还是文件内容显示,可由显示为图标复选框指定。
选定【创建控件】选项按钮表示可由用户指定一个ActiveX控件并放置在表单上。选定该选项按钮后,插入对象对话框中将显示【添加控件】按钮,单击该按钮,弹出浏览对话框,指定VisualFoxPro的主目录的文件FPOLE.OCX,然后选择【打开】,“对象类型”列表中将出现大量ActiveX控件选项,这些都是表单控件工具栏以外可供用户选用的控件,用户选定一项后并按确定按钮,指定的ActiveX控件就会出现在表单上。
选定【工具】【选项】命令,在如图5-26所示的“选项对话框”的【控件】选项卡中选定【ActiveX控件】选项按钮,在列表中选定所要添加的若干OLE对象和ActiveX控件复选框(例如选定MicrosoftWord文档和Microsoft公式3.0),单击“设置为默认值”按钮,单击【确定】按钮退出选项对话框。注意,在图5-26中,【可插入对象】和【控件】两个复选框默认为选定,此时在选定列表框中同时显示可供插入的对象与ActiveX控件。若清除了某一复选框,列表中便将去掉相应部分的选项。
OLE对象和ActiveX控件添加到表单控件工具栏后,还须进行表单控件工具栏显示转换才能显示出来。转换方法如下:在表单控件工具栏中选定查看类按钮,并在随后弹出的菜单中选定【ActiveX控件】命令,表单控件工具栏就会自动转换成显示OLE对象和ActiveX控件按钮的工具栏,此后用户就可使用这些按钮在表单上创建对象。图中显示了新增的MicrosoftWord文档和Microsoft公式3.0两个按钮。若要恢复到原状态,仍须选定查看类按钮,并在弹出菜单中选定【常用】命令即可。
要删除表单控件工具栏中的OLE对象按钮或ActiveX控件按钮,可通过【工具】菜单的【选项】命令来打开“选项对话框”,并在其【控件】选项卡的列表中清除有关复选框便可。25ActiveX绑定控件显示通用型字段中的OLE对象时,应注意以下三点:(1)在表单窗口所创建的OLE绑定型控件显示为一个含对角线的方框,用户可按需要将它拖至所期望的大小。创建的第1个OLE绑定型控件的Name属性默认为Oleboundcontrol1。(2)必须将控件与通用型字段绑定。就是说,应该在控件的ControlSource属性中设置通用型字段名。(3)表单运行时,仅当记录指针指向含有数据的通用型字段的记录时;OLE绑定型控件区域内才会显示数据。OLE绑定型控制可以用来显示通用字段。建立一个OLE绑定对象的步骤如下:在表单控制工具栏中,选择OLE绑定型控制按钮;移动鼠标到表单要插入控件的位置,单击鼠标;然后调整其大小;设置对象的ControlSource属性将OLE对象与通用字段连接起来。26表单参数的传递表单结果的返回操作表单控件命名表单对象操作表单对象关闭一个活动的表单表单管理给表单传递参数的步骤如下:在表单上建立属性用来接受参数例如ItemN和IremQ.在表单的Init事件代码中,写入接受参数语句:PARAMETEcStr,nNo在表单的Init事件代码中,把参数赋给属性,如下列:This.ItemN=cStrThis.ItemQ=nNo当运行表单时,在DOFORM命令中包含WITH从句。如:DOFORMmyform1WITH"Ball",34在DOFORM命令中使用NAME子句可以命名表单对象。例如,以下两条语句运行同一个表单,但是建立了两个不同的表单对象变量:DOFORMmyform3NAMEstu1DOFORMmyform4NAMEstu2从表单中返回结果的步骤为:设置表单的WindowType属性为1,使表单具有模块化的性质。在表单的Unload事件代码中,包含RETURN命令和返回值。在运行表单的程序或方法的DOFORM命令中包含关键字TO。如:DOFORMmyform2TONo1如果在Command窗口用DOFORM命令来运行表单,则表单对象变量是一个公共变量。可以用变量名来访问表单。在程序中用DOFORM命令运行一个表单,在程序或过程结束之后,对象就消失了,但是表单仍然是可见的。在命令窗口和程序中可用:表单名.Release&&表单名是由DOFORM…NAME<表单名>命令指定的表单名。或表单文件名.Release来关闭并释放表单。27[例5-9]在[例5-7]的表单中增加一个“选项”按钮,用来设置输入表单各项的默认值。
操作步骤如下:打开rsbwh表单,另存为cscdbd表单。在表单中添加一个“选项”命令按钮。并在该控件的Click事件中添加下列代码:DIMEa(100)*取出系统默认的职称FORi=1TOThis.Parent.Combo4.ListCount
a(i)=This.Parent.Combo4.List(i)ENDFOR*将原系统的默认值保存在一组变量里d1=2d2=This.Parent.Optiongroup1.Valuen1=This.Parent.Spinner1.Valuer1=This.Parent.Spinner2.Valuey1=This.Parent.Combo2.Valuen2=This.Parent.Spinner3.Valuer2=This.Parent.Spinner4.Valuey2=This.Parent.Combo3.ValueDOFORMcscdzbWITHn1,n2,aTOm&&调用子表单,传递参量n1、n2、a,返回值mIFm&&如果用户在“选项”对话框单击【确定】退出*清除原系统默认的职称选项
FORi=This.Parent.Combo4.ListCountTO1STEP-1 This.Parent.Combo4.RemoveListItem(i) ENDFOR*添加用户设置的职称选项
FORi=1TOALEN(a,0) IFTYPE("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()的代码为:*按用户设置,设置默认值IFThis.d1=1
This.chk婚否.Value=1ELSE
This.chk婚否.Value=0ENDIFThis.Optiongroup1.Value=This.d2This.Spinner1.Value=This.n1This.Spinner2.Value=This.r1This.Combo2.Value=This.y1This.Spinner3.Value=This.n2This.Spinner4.Value=This.r2This.Combo3.Value=This.y2并在保存命令按钮的Click事件中增加一行代码:Thisform.szcs()&&调用自定义方法设置用户定义的默认值放在原代码倒数第一行的前面。
新建一个名为cscdzb的表单,并添加五个标签控件,一个文本框控件,两个单选框控件,一个列表框控件,两个命令按钮控件。并将cscdbd表单的输入日期的控件的组合复制过来,复制两次,设置成图5-25所示的外观。属性设置:除了设置表单属性使外观如图所示外,还需设置列表框的属性MultiSelect的值为:.T.-真。并设置表单的属性WindosType的值为:1,这一点非常重要。定义一个表单属性,取名为:t。
代码设置:设置表单Init事件的代码为:设置表单Unload事件的代码为:设置文本框的KeyPress事件的代码为:设置列表框的KeyPress事件的代码为:设置【确定】命令按钮的Click事件的代码为:设置“取消”命令按钮的Click事件的代码为:
PARAMETEn1,n2,zc&&接收参数说明语句*将系统默认值带到选项设置窗口This.Spinner1.Value=n1This.Spinner3.Value=n2FORi=1TOALEN(zc,0) IFTYPE("zc[i]")<>"C" EXIT ENDIF This.List1.AddListItem(zc[i],i)&&将系统默认的职称选项添加到列表框ENDFOR
RETURNThisform.t&&表单的返回值IFnKeyCOde=13&&如果用户按了回车键*判断输入项在列表中是否存在
t=.F.FORi=1TOThis.Parent.List1.ListCount IFALLTRIM(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()ENDIFIFnKeyCOde=7&&如果用户按了Del键
FORi=1toThis.ListCount
IFThis.Selected(i)
This.RemoveListItem(i)&&删除所有选中的项
ENDIF ENDFORENDIFThisform.t=.T.&&表明用户单击【确定】退出该对话框*将用户设置的默认值保存在主从型变量中,从而带回主程序d1=This.Parent.Optiongroup2.Valued2=This.Parent.Optiongroup1.Valuen1=This.Parent.Spinner1.Valuer1=This.Parent.Spinner2.Valuey1=This.Parent.Combo2.Valuen2=This.Parent.Spinner3.Valuer2=This.Parent.Spinner4.Valuey2=This.Parent.Combo1.Value
*清空数组a原有的数据FORi=1TO100
a(i)=.F.ENDFOR*将用户设置的职称默认值保存在a数组中FORi=1TOThis.Parent.List1.ListCount
a(i)=This.Parent.List1.List(i)ENDFORThisform.Release
Thisform.t=.F.&&用户单击取消退出该对话框Thisform.Release285.3多表单应用程序
5.3.1MDI文档界面多文档界面与单文档界面的概念多文档界面(Multiple-DocumentInterface,简称MDI)是指应用程序主窗口中能包含多个应用程序窗口。
单文档界面(Single-DocumentInterface,简称SDI)是指应用程序窗口只允许显示和操作一个文档,此文档直接显示在应用程序窗口内。MDI文档界面的设计表单类型:顶层表单、子表单和浮动表单顶层表单:是一个没有父表单的独立表单。子表单:用于创建MDI应用程序的文档窗口,它包含在另一个主窗口中。
浮动表单:是由子表单变化而来的,它属于父表单的一部分,但并不是包含在父表单中。
29表单类型30表单类型设定1)顶层表单设定:在“表单设计器”中将表单的ShowWindow
属性设置为“2-作为顶层表单”。2)子表单设定:将表单的ShowWindow
属性设置为下列值之一:0-在屏幕中(默认)。1-在顶层表单中。3)浮动表单设定:先将表单的ShowWindow
属性设为0或1(即子表单),然后设置Desktop属性值为.T.。31MDI应用程序的建立建立MDI应用程序的步骤:1)建立顶层表单;2)建立相关的子表单;3)在顶层表单中调用子表单。MDI窗口之间的参数传递命令格式:DOFORM<子表单名>[WITH<实参表>][TO<内存变量>]功能:主表单与子表单相互传递数据。说明:(1)WITH<实参表>子句由主表单向子表单传递数据。(2)TO<内存变量>子句从子表单返回的值存入到<内存变量>中。32(3)在子表单的Init事件代码中应该有如下代码来接受主表单中WITH<实参表>的数据:
PARAMETERS<形参表><实参表>和<形参表>中的参数用逗号分隔,<形参表>中的参数数目不能少于<实参表>中的参数数目。多余的参数变量赋值为.F.。
主表单带参数调用子表单,要求子表单WindowtType属性值要设为1-模式表单。[例5-10]
创建如下所示的顶层表单以及子表单,要求用户从子表单中输入的圆半径值,在主表单中求出相应的圆周长和圆面积。3334设计步骤:设计主表单(circle.scx)
新建表单,进入表单设计器,增加4个标签,3个文本框和2个命令按钮。
编写程序代码:编写【输入半径】按钮Command1的Click事件代码:bj=THISFORM.Text3.ValueDOFORMradiusWITHbjTOrTHISFORM.Text1.Value=2*pi()*rTHISFORM.Text2.Value=pi()*r^2THISFORM.Text3.Value=r设计子表单(radius.scx)
新建表单,进入表单设计器,增加1个标签,1个文本框和1个命令按钮。用户定义属性:R,初始值为0。编写程序代码:radius.scx表单的Init事件代码:PARA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国平衡重式电动车数据监测研究报告
- 2025至2030年中国PVC防静电胶地板数据监测研究报告
- 【假期提升】 五升六语文暑假作业(十三)-人教部编版(含答案含解析)
- 2025年消防设施操作员之消防设备中级技能提升训练试卷A卷附答案
- 城步中考数学试题及答案
- 采购与制造分包合同(2篇)
- 高等教育自学考试《00102世界市场行情》模拟试卷二
- 2024年广东省公务员《申论(省市级)》试题真题及答案
- 内燃机基础知识培训课件
- 教育培训机构课程退费须知
- 2025年天翼云解决方案架构师认证考试指导题库-上(单选题)
- 2025年广东省深圳市高考语文一模试卷
- 2025年春人教版英语八年级下册同步课件 Unit 7 Whats the highest mountain in the world课件 Section A 1a-2d
- 2025年哈尔滨铁道职业技术学院单招职业倾向性测试题库必考题
- 行为规范教育中学校长在国旗下讲话:严格要求自己规范自己的行为
- 2025年福建省高职单招职业适应性测试题库及答案解析
- 七下综合世界真奇妙-共享“地球村”
- 2025年信阳职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025-2030年中国eva热熔胶行业运营状况与发展潜力分析报告
- 2024年广东职业技术学院高职单招语文历年参考题库含答案解析
- 第一单元第6课时 小兔子安家(教学课件)-一年级下册数学(北师大版•2024)
评论
0/150
提交评论