第六章表单设计与应用_第1页
第六章表单设计与应用_第2页
第六章表单设计与应用_第3页
第六章表单设计与应用_第4页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章 表单设计与应用表单(Form)可以把它理解为应用程序的界面.示范.表单的英文是Form从现在起,请大家注意本章中提到的每一个概念的英文名字并记住它.创建表单的方法和前面创建其他东西的方法类似,有以下几种方法:(1) 文件à新建à表单(2) 项目管理器中,展开到文档,选表单,新建(3) 命令方式:CREATE FORM不管用哪种方法,都将打开表单设计器窗口.同时激活的还有表单控件工具栏和属性工具栏.演示放一个按钮,并将按钮的标题改成”确定”.运行后看效果.如果要深入地学习怎么样设计表单,有必要在讲表单设计之前阐述几个概念6.1面向对象的概念编程序有两种方法:一种称为面

2、向过程的方法,一种称为面向对象的方法.所谓面向过程的方法,就是传统的,手工输入命令,从程序的第一行起一直写到程序的最后一行.这种方法效率低,代码不具有可重用性.所谓面向对象的编程方法,就是我们面向的不再是一行行的程序语言,而是面对着一个一个的具体对象,对这些具体对象进行编程就可以了.什么叫对象?对象就是一个个具体的东西,例如一个按钮,一个对话框,一个表单,这些都可以看成是一个对象.我们只需要面向这些按钮,表单等等对象来编写程序就行了.面向对象的编程方法有点类似与组合家具的拼装.设想,假如我们要打一个柜子,要求有五个抽屉,一个柜门,面向过程的方法就是上山去采木,然后干燥木头,量线距木,刨子刨木头

3、打成一块块的板材,依此做成框架和五个抽屉等等.而面向对象的方法则是现在已经有了现成的抽屉,框架和柜门,我们只要把它们拿过来拼装一下就行了.面向对象的方法也是这样,假如我们要编写一个程序界面,这个界面有两个按钮,一张表格,如果系统已经给我们提供好了按钮和表格的半成品(就象抽屉,抽屉这个半成品我已经做好了,直接拿来改一改就行),一样的,我们只要把系统提供给我们的这个按钮和表格直接拿来稍做修改就完成了,根本不需要为怎么样生成这个按钮而伤脑筋去写程序.这就是面向对象的编程方法.有了面向对象的技术,我们只需要去关心如何组合和调试系统给我们提供的配件就行了.6.1.1对象与类的概念(1)对象: 对象的含义

4、实际上有广义和狭义两种理解。广义上说,对象就是一个实体,例如现实生活中的一张桌子、一张椅子,都可以看成一个对象;狭义上来说,只局限在程序设计的范畴内,那么程序中的一个按钮,一个表单等等,都叫做对象。(2)类:类的概念用不着把它理解得太抽象,就从字面上来理解就行了.就是指一个划分.例如,所有的动物都是动物类,所有的猫都是猫类.在座的都是人类.在计算机中,所有的按钮都属于按钮类,所有的表单都属于表单类,等等.书中还提到了子类与继承的问题.这个问题也可以形象化地来理解.如猫类,它就是动物类的子类.所谓继承,是指子类可以自动父类的一些特点.如猫类,它是动物类的子类,那么动物类的一些特点,猫都可以自动拥

5、有,这个就叫继承VFP中的对象可以分为两大基类,即容器类和控件类。与此对应,VFP对象也分为容器对象和控件对象。分别介绍如下:(1) 容器类对象容器类可以包含其他对象,并且允许访问这些对象。例如表单,它本身就是一个大的容器类,它里面可以放置按钮、文本框等等。又比如一个命令按钮组,它里面可以容放很多命令按钮,所以它也是一个容器类对象。容器类及其能包含的对象如表6-1所示:表6-1 容器类对象对象名称语法名称工具栏图标 能包含的对象表单集Formset表单,工具栏表单Form页框, 任意控件,容器,或自定义对象命令按钮组CommandGroup命令按钮选项按钮组OptionGroup选项按钮容器C

6、ontainer任意控件页框PageFrame页面页面Page任意控件,容器和自定义对象表格Grid表格列工具栏ToolBar任意控件,页框和容器(2) 控件类对象控件类对象通常是指一个可以以图形化的方式显示出来并能与用户进行交互的对象。区别于容器类对象,它其中不能再包含别的对象。表6-2列出了常用的控件类对象。表6-2 控件类对象对象名称语法名称工具栏图标 说 明文本框Text用于编辑字段或变量的内容复选框Check用于逻辑型数据选择输入组合框Combo打开一个列表供选择(不可多选)命令按钮Command用于启动一个事件,完成某项任务标签Lable用于显示要说明的文字编辑框Edit用于字符型

7、变量和备注型字段的编辑超级链接HyperLink可以使活动文件转入URL图像Image显示.bmp图片线条Line用于显示水平或竖直或对角线的图形列表框List显示一列数据供选择(可多选)定时器Timer用于后台计时控制形状Shape用于显示矩形到圆的图形控制微调Spinner可通过单击上下箭头微调框内的数值当要在表单中添加这些对象时,只需要单击“控件工具栏”中的相应图标按钮,然后在表单的适当位置再次单击即可。被安放的对象将会以其语法名称后跟序号来默认命名,如Text1,Text2等等。当在程序中引用它们时,只需指出其名称(如Text1,Text2)即可。6.1.2 对象的属性 对象的属性描述

8、事物的特性和状态。比方说,描述学生的姓名、性别、出生日期等,这些都是学生这个对象的属性。又例如,表单中的一个按钮,它就是一个对象,那么对于按钮这个对象来说,它又有如下的一些属性: Caption: 该属性指的是这个按钮的标题名。 Enabled: 该按钮是否可用。 ForeColor: 这个按钮的前景颜色。 Visible: 这个按钮是否可见。例:改变caption属性的值,使之成为”OK”,则按钮的标题变为”OK” 改变visible属性值使之成为.f.,则按钮不可见.6.1.3 对象的事件和方法每个对象都可以对一个被称为事件的动作进行识别和响应。事件是一种预先定义好的特定的动作,由用户或系

9、统激活。在多种情况下,事件是通过用户的交互操作产生的。例如,对一部电话来说,电话是一个对象,那么我们拿起电话听筒的时候,拿电话的这个动作就激发了一个事件(接听电话的事件)。在VFP中,可以激发事件的用户动作主要包括:鼠标的点击、鼠标的移动、键盘的按下等等,都可以触发一个事件。例如鼠标的点击,它就是一个click事件。方法是规定对象如何实现其行为的程序或过程。它是一个程序,这个程序可以是相对于某个事件而编写的, 比方说对于一个click事件,我们可以为它编制一个方法,一旦click事件发生,系统就会调用这个方法来完成相应的程序动作。这是相对于某个事件的方法,但是方法本身也可以独立于事件之外,与任

10、何事件都不发生联系。事件集合虽然范围很广,但却是固定的,用户不能创建新的事件。然而方法程序集合却可以无限扩展。VFP中常用的事件和方法有:(1) Init事件在对象建立时引发。在表单对象的Init事件引发之前,将先引发它所包含的控件对象的Init事件,所以在表单对象的Init事件代码中能够访问它所包含的所有控件对象。(2) Destroy事件在对象释放时引发。表单对象的Destroy事件在它所包含的控件对象的Destroy事件引发之前引发,所以在表单对象的Destroy事件代码中能够访问它所包含的所有控件对象。(3) Error事件当对象方法或事件代码在运行过程中产生错误时引发。事件引发时,系

11、统会把发生的错误类型和错误发生的位置等参数传递给事件代码,事件代码可以据此对错误进行相应的处理(4) Load事件在表单对象建立之前引发,即运行表单时,先引发表单的Load事件,再引发表单的Init事件。(5) Unload事件在表单对象释放时引发,是表单对象释放时最后一个要引发的事件。比如在关闭包含一个命令按钮的表单时,先引发表单的Destroy事件,然后引发命令按钮的Destroy事件,最后引发表单的Unload事件。(6) Click事件用鼠标单击对象时引发。(7) DbClick事件用鼠标双击对象时引发。(8) RightClick事件用鼠标右击对象时引发。(9) Interactiv

12、eChange事件当用鼠标或键盘通过交互式改变一个控件的值时引发。(10) Release方法将表单从内存中释放(清除)。比如表单有一个命令按钮,如果希望单击该命令按钮时关闭表单,就可以将该命令按钮的Click事件代码设置为: ThisForm.Release(11) Refresh方法重新刷新表单或控件及它的所有值。当表单被刷新时,表单上的所有控件也都被刷新。当页框被刷新时,只有活动页被刷新。(12) Show方法显示表单。该方法将表单的Visible属性设置为.T.,并使表单成为活动对象。(13) Hide方法隐藏表单。该方法将表单的Visible属性设置为.F.。(14) SetFocu

13、s方法此控件获得焦点,使其成为活动对象。如果一个控件的Enambled属性值或Visible属性值为.F.,将不能获得焦点。6.1.4 对象(类)的特性对象之间是有差别的,但是它们之间存在着一些共性,即继承性、多态性和封装性。这也是类所具有的特性,因此在这里一并讲述。(1) 继承性:指如果一个对象是在另一个对象的基础上产生的,那么这个对象自动拥有原来对象的全部特征(当然也可以为它再加上一些新的特征)。这种继承的特性可以极大地简化数据库系统的代码编制的复杂程度。(2) 多态性:指不同的对象可能具有相同的属性、方法和事件类型。例如,相关联的几个对象可以同时包含Refresh方法和Click事件,尽

14、管具体的属性值、方法代码可能有所不同。也就是说,当某个过程将其中一个对象作为参数传递时,它不必知道参数是何种类型的对象,只需要调用Refresh方法即可。这一特性提高了应用系统开发的独立性。(3) 封装性:指对象的属性、方法和事件代码都存入对象中,对象调用的一般用户不需要了解该对象的属性,方法和事件代码,只需要知道这个对象具有哪些属性、事件和方法,如何使用这些属性、事件、方法即可。例如,对一个按扭,我们只需要知道它有click这个事件、有caption这个属性,至于它的这些事件、属性是如何被计算机所捕获的,我们并不需要知道。这就是它的封装性。6.1.5 容器中对象及层次的引用在VFP中,当我们

15、使用了容器对象后,就会产生对象的嵌套层次关系。当我们引用嵌套层次关系中的对象的时候,往往需要指明对象在嵌套层次中的位置,这时,我们就需要用到如下的几个属性或关键字: This: 当前对象。光标落在什么上面,或者当前正在对什么编程? Parent: 当前对象的直接容器对象,即父对象。 ThisForm: 当前对象所处的表单。 ThisFormSet: 当前对象所处的表单集。其中,Parent是属性,其他三个是关键字。他们在对象嵌套的层次关系中分别指明不同的引用对象。例如:This.Caption=“OK” *当前对象的标题设为“OK”。This.Parent.BackColor=RGB(1920

16、0) *设置当前控件所在的表单的前景色为暗红色。例:表单中有一个按钮command1和一个页框pageframe1,页框中包含两个页面page1和page2,其中分别包含一个文本框text1和一个按钮command1.注意这里有两个command1(1)假设当前对象为command1(正在对command1编程),要引用page1里的text1:Thisform.pageframe1.page1.text1.value=OKThis.parent.pageframe1.page1.text1.value=”OK”(2)假设当前对象为page2中的command1,要引用page1中的text1

17、:Thisform.pageframe1.page1.text1.value=OKThis.parent.parent.page1.text1.value=OK6.1.6 对象的属性,方法及事件的调用(1) 对象的属性设置及引用方法设置对象的单个属性 既可以在运行时也可以在设计时为它进行属性设置。语法是: <对象>.<属性>=<属性值>例如,设置button1的标题属性为“退出”:button1.caption=“退出”设置对象的多个属性 当需要对某个对象的多个属性进行设置时,可以使用WITHENDWITH结构简化设置的过程。例如,在表单form1中,要设置

18、表格grid1的列的多个属性,可以使用以下语法结构:WITH Form1. Grid1. Column1.width=5.Resizable=.F.ForColor=RGB(0,0,0).BackColor=RGB(255,255,255).SelectOnEntry=.T.ENDWITH(2) 调用方法程序如果对象已经创建,便可以在应用程序中的任何一个地方调用这个对象的方法程序。语法是:<对象>.<方法>例如,下列语句调用方法程序来显示表单,并将光标的焦点设置在文本框上:frsFormSet.frmForm1.showfrsFormSet.frmForm1.txtGe

19、tText1.setFocus在表达式中,有返回值的方法程序必须以圆括号结尾。例如,下列语句将用户自定义的GetNewCaption方法程序的返回值设置成表单的标题:Form1.Caption=Form1.GetNewCaption( )传递方法程序的参数必须放在方法程序名后面的圆括号中,例如,Form1.show(nStyle)即将nStyle传递给Form1的show方法程序代码。6.2 Visual Foxpro 6.0的编程工具与步骤6.2.1 表单设计器表单设计器的启动方法和控件摆放的方法前面已经介绍过。以下重点介绍它的其他一些附加窗口和工具栏。 1. 属性窗口(如图6-4所示)(1

20、) 对象下拉列表框该框标识当前选定的对象。单击右端的向下箭头,可看到包含当前表单、表单集和全部控件的层次列表,我们可以从列表中选择要更改其属性的表单或控件。注意,其中对象的摆放是按层次规则的,因此我们可以从中清楚地看到对象之间的包含关系。(2) 选项卡选项卡可按分类显示属性、事件和方法程序。 全部: 显示全部属性,事件和方法程序。 数据: 显示有关对象数据特征和属性。 方法程序: 显示方法程序和事件。 布局: 显示所有的布局属性。 其他: 显示其他和用户自定义的属性。由于对象的属性和方法在这里被归类显示(并按首字母排序),因此可以帮助我们在设置相关属性时快速查找。例如,要设置按钮的Captio

21、n属性,由于是和布局有关的,所以切换到布局选项卡,并按字母序就可以快速找到;又如要看到此按钮所有相关的方法程序,只需切换到方法程序选项卡,寻找其中是“用户自定义过程”的项即可。属性的设置方法是直接在属性设置框中键入值;而方法程序的查看和编辑方法是先选定该控件要设置的事件或方法,然后用鼠标双击,在弹出的事件方法代码框中修改和编辑,完成后直接关闭该代码窗口。2. 表单设计器工具栏(如书上图6.8所示)其中的按钮依次为: 设置TAB键次序:显示当按下Tab键时,焦点从一个对象移向另一个对象的跳转次序。(设置方法参书P184) 数据环境:显示该表单运行时所需要的数据环境。(下面介绍) 属性窗口:显示或

22、隐藏所选对象的属性窗口。 代码窗口:显示或隐藏所选对象的代码窗口,用户可以在其中查看和编辑对象的事件代码。 表单控件工具栏:显示或隐藏“表单控件”工具栏。 调色板工具栏:显示或隐藏“调色板”工具栏。 布局工具栏:显示或隐藏“布局”工具栏。 表单生成器:启动表单生成器,快速生成表单。 自动格式:启动“自动格式生成器”对话框,为所选表单提供显示风格。至少选一个控件才能激活此按钮。6.4.3 数据环境每一表单或表单集都包含一个数据环境。数据环境是一个对象,它包含与表单相互作用的表或视图,以及表单所要求的表之间的关系。用户可以使用“数据环境设计器”直观地、可视化地设置表单数据环境,并与表单一起保存在表

23、单文件中。1.打开数据环境设计器方法一:“显示”à”数据环境”方法二:在表单空白处(不放控件的地方)右击,弹出数据环境设计器2.向数据环境添加表或视图3.从数据环境移去表或视图在环境中单击选中要移去的表或视图后,按右边的”移去”按钮.6.2.3 用表单生成器创建快速表单在利用表单设计器创建表单时,一旦表单设计器被激活时,在VFP系统主菜单上会增加一个“表单”的菜单,我们可以选择其中的“快速表单”命令来生成一个简单的快速表单,如图所示。图 表单生成器选择需要的数据库和表,将表中所有字段添加到“选定字段”框中,然后选“样式”选项卡,在“样式”中选择一种样式。单击“确定”按钮,即可生成快速

24、表单。执行表单时系统会提示保存表单。用表单生成器生成的只是个表单外形,要用“表单设计器”加以修改和完善。例如,对刚才生成的快速表单添加四个按钮控件和一个容器控件:先添一个容器,在容器里放置四个按钮,并调整四个按钮在容器的中央,可使用布局工具栏使之布局合适。(如图7-6)图 用表单生成器生成快速表单6.2.4控件的属性及方法的编辑前面添加了四个命令按钮控件,运行表单可以发现,它们不起任何作用。若要它们能响应事件,就要设置控件的属性及方法。例如:要求四个命令按钮能响应如下事件: 单击COMMAND1:显示上一条记录。 单击COMMAND2:显示下一条记录。 单击COMMAND3:显示第一条记录。

25、单击COMMAND4:显示最后一条记录。我们先设置COMMAND1的属性。步骤如下:1. 打开属性窗口,在选择对象下拉表框中选中COMMAND1。2. 在“布局”选项卡中选择“Caption”(标题),在文本框中将原标题“Command1”改为“上一条记录”。这时按钮COMMAND1的标题变为“上一条记录”。3. 在“方法程序”选项卡中选择“Click Event”(单击事件),双击。4. 在弹出的“COMMAND1.CLICK”代码窗口中输入如下的方法程序:IF .NOT. BOF()SKIP 1THISFORM.REFRESHELSETHISFORM.COMMAND1.ENABLED=.F

26、. ENDIF IF .NOT. EOF()THISFORM. COMMAND2.ENABLED=.T. ENDIF5. 关闭代码窗口。COMMAND1的单击事件的方法程序即编写完成。6. 其它三个按钮的属性设置同上。将COMMAND2的Caption设置为“下一条记录”,方法程序为:IF .NOT. EOF()SKIPTHISFORM.REFRESH ELSETHISFORM.COMMAND2.ENABLED=.F. ENDIF IF .NOT. BOF()THISFORM.COMMAND1.ENABLED=.T. ENDIF将COMMAND3的Caption设置为“第一条记录”,方法程序为

27、: GO TOP THISFORM.REFRESH IF .NOT. EOF()THISFORM. COMMAND2.ENABLED=.T. ENDIF IF .NOT. BOF()THISFORM.COMMAND1.ENABLED=.T. ENDIF将COMMAND4的Caption设置为“最后一条记录”,方法程序为: GO BOTTOM THISFORM.REFRESH IF .NOT. EOF()THISFORM. COMMAND2.ENABLED=.T. ENDIF IF .NOT. BOF()THISFORM.COMMAND1.ENABLED=.T. ENDIF最后,我们再设置容器控

28、件Container1的布局属性:选中容器控件,在“布局”选项卡中选中Special Effect,设置为“凹下”,使之产生凹下的效果。6.2.5 表单的运行表单设计完成后,可运行一下看效果是否满意。执行表单主要有两种方法: 方法1: 选择“表单”菜单中的“执行表单”命令 方法2: 在命令窗口中输入命令: DO FORM 表单文件名 NOSHOW如果使用了NOSHOW子句,表单运行时将不显示,直到表单对象的Visiable属性被设置为.T.或者调用了SHOW方法。(翻到书P192)6.6基本型控件6.6.1标签(Label)标签用以显示文本.1.Caption属性被显示的文本在Caption属

29、性中指定.需要注意的是,在设计代码时,应该用Name属性值来引用标签而不是用Caption属性.同样的概念也可类推到按钮等.如以下”确定”按钮,在程序代码中如要引用这个按钮应该是button1.而不是”确定”(以上属性也适用于其他大多数控件)2.Alignment属性指定标签在表单中的对齐方式.0-左对齐,1-右对齐,2-居中(以上属性也适用于其他大多数控件)3.F-属性Fontsize:字体的大小Forecolor:字体的颜色Fontunderline:字体是否有下划线FontItalic:字体是否斜体FontBold:字体是否是粗体6.6.2命令按钮(Command Button)命令按钮

30、用来完成某个特定功能.实现该功能的代码放在click事件中,用户通过单击该按钮就可以执行这段代码.1. Enabled属性指定该按钮是否可用.如将其值设置为.F.,则该按钮灰显.2. Visible属性指定该对象是否可见.如将其值设置为.F.,则该按钮不可见.(以上两属性也适用于其他大多数控件)6.6.3文本框(Text)为表单提供输入框.1. ControlSource属性为文本框指定要绑定的数据源.(可以是一个字段或内存变量).运行时,文本框首先显示该变量的内容.而用户对文本框的编辑结果,也会最终保存到该变量中.(该属性也适用于编辑框,复选框,列表框,组合框等控件)2. Value属性该文

31、本框的值.可以通过设置该属性为文本框指定初始值.若要在运行时不让用户改变所显示的文本,可把文本框的ReadOnly属性设置为.T.,或者把文本框的Enabled属性设为.F.(该属性也适用于其他大多数控件)3.PasswordChar属性设置回显字符.例如,将该属性值设置为*,则不论用户输入什么字符都将以*回显.常用于密码的输入框.6.6.4 编辑框(Edit)编辑框用于输入或更改文本的内容。与文本框不同的是,编辑框可以输入多段文字。编辑框一般用来显示长的字符型字段或备注型字段(将编辑框与备注型字段绑定),并且允许用户编辑文本。编辑框也可显示一个文本文件或剪贴板中的文本。1.HideSelec

32、tion属性指当编辑框失去焦点时,编辑框中选定的文本是否依然处于选定状态.如果设置为.T.(默认值),则表示当失去焦点时,编辑框中选定的文本不显示为选定状态,只有当再次获得焦点时才重新处于选定状态;如果该属性值设置为.F.,则表示失去焦点时,该编辑框中选定的文本仍处于选定状态.1.ReadOnly属性指定用户能否对编辑框中的内容进行修改.默认为.F.,即非只读.如果设置为.T.,则该编辑框为只读.ReadOnly属性和Enabled属性是有区别的.尽管在Readonly属性为.T.和Enabled属性为.F.的情形下该编辑框都无法编辑,但前种情况下光标依然可以落入其中,而后者则不行.本特点也适

33、用于其他一些控件(文本框,表格等)2.ScrollBars属性为了方便用户处理长文本的数据,VFP还提供了可用来显示垂直滚动条的ScollBars属性。该值为2(默认值)时,允许有滚动条,为0时则没有滚动条.3.SelStart属性返回用户在编辑框中所选文本的起始点位置或插入点位置.该属性也适用于文本框,组合框等控件4.SelLength属性返回用户在编辑框中所选文本的字符数.若没有文本被选定,则返回05.SelText属性返回用户编辑区内选定的文本,如果没有选定任何文本,则返回空串书例6.6设置编辑框的hideselection属性为.F.设置查找按钮的click事件代码:n=AT(&quo

34、t;example",Thisform.edit1.value)if n<>0thisform.edit1.selstart=n-1thisform.edit1.sellength=len("example")elsewait windows "ûÓÐÆ¥Åä" timeout 1endif设置替换按钮的click事件代码:if thisform.edit1.seltext='example'thisform.edit1.seltext

35、='exercise'elsewait windows 'ûÓÐÑ¡ÔñÐèÒªÖû»µÄµ¥´Ê' timeout 1endif6.6.5 复选框(Check) 复选框是从多个选项中选择任意个选项,可以选一个,也可以多选或全选。1.Caption属性用来指定复选框旁边的标题2.ControlSource属性指明复选框所绑定的数据源.作为数据

36、源的字段变量或内存变量,其类型可以是数值型或逻辑型.对于数值型变量,值0.1.2(.null.)分别对应复选框未被选中,被选中和不确定.对于逻辑型变量,.f.,.t.null.分别表示它的未被选中,被选中和不确定3.value属性如果没有设置controlsource属性,那么可以通过value属性来设置或返回复选框的状态.该属性默认值为0【例】利用复选框来控制输入或输出文本的字体风格。 编写表单的Activate事件代码:this.text1.setfocus 为复选框的click事件编写的代码:thisform.text1.fontbold=this.valuethisform.text1

37、.fontitalic=this.valuethisform.text1.fontunderline=this.value复选框支持图形按钮形式,只需将复选框的style属性设置为1-图形,然后分别设置picture、downpicture和disablepicture属性为所需要的图象,这样就可以把复选框设计成图文并茂的图形按钮形式了。其中,picture为正常状态时按钮的图象,downpicture为按钮按下时的图象,disablepicture为按钮不可用时的图象。6.6.6 列表框(List) 列表框显示一列数据,用户可以从中选择一个或多个数据存入到指定变量中.列表框要显示哪个数据表中

38、的数据呢?1. RowsourceType属性和RowSource属性RowsourceType属性指明列表框中条目的数据源类型,RowSource属性指明列表框中条目的数据源.其具体含义见书上p201表6.15最常见的一种情况是列表框要显示的数据处在哪个数据表中,就把它的rowsourcetype属性设置成6-字段,再把它的rowsource属性设置成相应的字段值.例如,在表单中放上一个list和一个command,设置表单的数据环境为课程.dbf,然后将这个list的rowsourcetype属性设置成6-字段,再把它的rowsource属性设置成相应的字段.运行即可看出效果. 2.Col

39、umnCount属性指定列表框的列数3.ControlSource属性指定要绑定的数据源4.Value属性返回列表框中被选中的条目.该属性可以是字符型(默认),也可以是数值型.如果ControlSource属性指定了字段或内存变量,那么Value属性与ControlSource属性指定的变量就会具有相同的数据和类型.对于列表框和组合框,该属性只读.5.MultiSelect属性指定用户能否在列表框中进行多重选择.0或.f.(默认)不可多选,1或.t.可多选,由用户按CTRL键来实现多选.6.list属性用以存取列表框中数据条目的字符串数组.见书例8.Selected属性指出列表框内的某个条目是

40、否处于选定状态.如书例.例如在前面的例子中,为command的click事件加上如下代码:if thisform.list1.selected(3)messagebox('选中了!')endif运行表单,当list中的第三个条目被选中时,按下按钮就会弹出对话9.additem方法为列表框增加一个新条目【例】为列表框添加四个选项ABCD。首先设置列表框list1的RowSourceType取值为0,然后为列表框所在的表单的init事件添加如下代码:thisform.list1.additem(A')thisform.list1.additem(B')thisfor

41、m.list1.additem(C')thisform.list1.additem(D')则每次表单启动初始化的时候都会为列表框添加四个选项。【例】删除列表框中的一个选项C。thisform.list1.removeitem(3)6.6.7 组合框(Combo) 使用组合框可以把相关的信息以列表框的形式显示出来。我们可以通过设置它的style属性来指定组合框的类型。0-下拉组合框 2-下拉列表框(1)下拉组合框:用户可以单击下拉组合框上的按钮以查看选择项,也可以直接在按钮旁边的框中直接输入一个新项。 (2)下拉列表框它与下拉组合框的区别是:下拉组合框允许直接输入新内容,并将新内

42、容作为一个项直接添加到组合框对象中,下拉列表框不允许输入新内容,只能在列表项中选择现有项目。1.怎样给组合框中的下拉列表里添加值呢?可以简单地用生成器来生成.右击弹出生成器.添加的值是手工输入的数据在”列表项”中选择”手工输入数据”,然后在下面的列中手工输入添加的值如果是数据表中的字段值,则选择”表或视图中的字段”2.Value属性返回组合框中被选中的条目.该属性可以是字符型(默认),也可以是数值型.例如,为上例的表单添加一个按钮,写入click事件代码:if bo1.value='计算方法'messagebox('ok!')endif则当组合框选中了计算方法后

43、,会弹出ok!书例6.7(略)表单的load和unload事件代码:close database all组合框的Interactive事件代码t_table=this.valueselect 1use &t_tablethisform.list1.rowsource=t_table命令按钮”确定”的click事件代码:sele 1set fields tofor i=1 to thisform.list1.listcountif thisform.list1.selected(i)mf=thisform.list1.list(i)set fields to &mfendifen

44、dforbrowse6.6.8 计时器(Timer)计时器独立于用户的操作,它对时间作出反应,在一定的时间间隔内触发执行某一任务。在运行过程中计时器控件是不可见的,因此不考虑该控件的位置和大小。它的主要属性是:Interval: 规定计时器触发的时间间隔,单位是ms。它的取值范围是02 147 483 647,即最长时间间隔不超过24天。【例】制作不断闪现的图片。在表单中添加一个图片控件image1,并设置好图片源。(设置好图像控件的stretch属性为1,然后再选择图象文件!)思路: 不断地改变图片对象的Visible属性来实现“闪烁”的效果。 为计时器填写Init事件代码:PUBLIC c

45、ccc=-1 为计时器填写Timer事件代码:cc=-ccIF cc=1THISFORM.image1.visible=.t.ELSETHISFORM.image1.visible=.f.ENDIF 为计时器的Interver属性设置为500,即每500毫秒触发一次程序。运行表单,即可看到图片的闪烁效果。如果要使其越闪越快,只需在末尾再加两句:if erval>20erval=erval-15endif如果在放完的时候给出提示信息,只需要在上面的if语句中再加一句:Else

46、Messagebox(放完了!还看!)运行后发现确实有效果,但是死循环.需要在这之后再加上这几句:thisform.releaseclear eventsquit6.7容器型控件容器型控件主要有命令组,选项组,表格,页框等.容器与其所包含的控件一般都有自己的属性,方法和事件,例如页框和它所包含的页面都有自己的Enabled属性.如果是要指明其中的某一个页面的Enabled属性而不是整个页框的Enabled属性,必须从属性窗口的对象下拉列表框中来选中它.其他的容器型控件也是如此,例如要为命令组中某一个命令按钮的click事件编程,必须先在属性窗口的对象下拉列表框中来选中它后再双击,否则就是对整个

47、命令按钮组的click事件进行编程了.6.7.1命令按钮组(CommandGroup)1.ButtonCount属性指定命令组中按钮的数目2.Buttons属性用于存取命令组中各按钮的数组.用户可以利用该数组为命令组中的命令按钮设置属性或调用其方法.例如:ThisForm.myCommandG.Buttons(2).Visible=.f.即将命令组myCommandG中的第2个按钮设置成隐藏的.3.Value属性返回命令组中的当前按钮的值.该值可以是数值型也可以是字符型.如果是数值型(默认),则指明是第几个按钮;如果是字符型,则指明的是Caption属性为该值的按钮.例:DO CASE CASE This.Value=1 *第一个按钮被按下后要执行的动作 CASE This.value=2 *第二个按钮被按下后要执行的动作 ENDCASE或者这样写:DO CASE CASE This.Value=确定 *确定按钮被按下后要执行的动作 CASE This.value=取消 *取消按钮被按下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论