570 likes | 704 Views
控件设计. 第 7 章 控件设计. 7.1 控件的分类. 7.2 控件. 7.3 小型案例实训. 7.4 习题. 教学目的与要求. 掌握控件的分类. 掌握 标签、文本框、编辑框、命令按钮的设计. 掌握列表框与组合框、微调框、复选框的设计. 掌握 命令按钮组、选项按钮组、表格、页框的设计. 掌握计时器、线条、形状控件的设计. 掌握 ActiveX 控件的设计. 掌握自定义类的创建与使用. 7.1 控件的分类. 控件是用于显示数据、执行操作的一种图形对象。. 7.1 控件的分类. 根据控件与数据源的关系,表单中的控件分为:
E N D
第7章 控件设计 7.1 控件的分类 7.2 控件 7.3 小型案例实训 7.4 习题
教学目的与要求 掌握控件的分类 掌握标签、文本框、编辑框、命令按钮的设计 掌握列表框与组合框、微调框、复选框的设计 掌握命令按钮组、选项按钮组、表格、页框的设计 掌握计时器、线条、形状控件的设计 掌握ActiveX控件的设计 掌握自定义类的创建与使用
7.1 控件的分类 控件是用于显示数据、执行操作的一种图形对象。
7.1 控件的分类 根据控件与数据源的关系,表单中的控件分为: 绑定型控件:是指其内容可以与后端的表、视图或变量相关联的控件,通常用于输入、显示、修改数据等。通常用ControlSource属性用来指定与其他控件相绑定的数据源。 非绑定型控件:是指其内容不与后端的表、视图或变量相关联的控件,通常用于设置响应事件的处理代码,即用于处理操作。 根据控件是否包含其他控件来分,分为: 基本控件:是指不能包含其他控件的控件 容器控件:是指可以包含其他控件的控件
7.2 控 件 7.2.1 标签(Label) 7.2.2 文本框(TextBox) 7.2.3 编辑框(EditBox) 7.2.4 命令按钮(CommandButton)与命令按钮组 7.2.5 列表框(ListBox)与组合框(ComboBox) 7.2.6 选项按钮组(OptionGroup) 7.2.7 复选框(CheckBox) 7.2.8 微调框(Spinner) 7.2.9 表格(Grid) 7.2.10 页框(PageFrame) 7.2.11 计时器(Timer) 7.2.12 线条(Line)和形状(Shape) 7.2.13 ActiveX控件
7.2 控件 7.2.1 标签(Label) 标签是用于显示文本的图形控件,通常用于显示提示信息。 常用属性: Caption:定义标签显示的内容。 BackStyle:设置标签的背景是否透明。 AutoSize:决定是否自动调整标签的大小。 WordWrap:决定标签上显示的文本能否自动换行。 Alignment:指定控件中文本的对齐方式。 还有FontSize、FontName、ForeColor、BackColor等属性。
7.2.2 文本框(TextBox) 文本框是一个绑定型控件,通常用于显示或编辑表中的字段内容,也可以用于输入数据。 1.常用属性 ControlSource:指定要绑定的数据源 Value:是指当前文本框中显示的值 PassWordChar:指定用作占位符的字符。一般设置为星号(*) InputMask:指定文本框中数据的输入格式和显示方式 Format:指定文本框中Value属性的输入和输出格式 ReadOnly:指定控件是否只读。 2.常用事件 Valid、GotFocus、When、LostFocus分别是在文本框失去焦点之前、得到焦点的时候、失去焦点的时候和失去焦点后发生 3. SetFocus方法
7.2 控件 文本框
7.2.3 编辑框(EditBox) 编辑框类似于文本框,可用来保存较长的文本,通常与表中的备注型字段绑定。 常用属性: SelText:返回用户编辑区内选定的文本 SelStart:返回编辑框中所选文本的起始点的位置或插入点的位置 SelLength:返回用户在文本框中所选文本的字符数 ScrollBars:指定控件所具有的滚动条类型 ControlSource: Value:
7.2.4命令按钮(CommandButton)与命令按钮组(CommandGroup)7.2.4命令按钮(CommandButton)与命令按钮组(CommandGroup) 命令按钮通常用来启动一个事件以完成某种功能,例如记录指针的移动、退出表单等。命令按钮组是一种容器型控件,包括一组命令按钮。 1.常用属性 Caption:指定在命令按钮上显示的文本。设置访问键\<字母,ALT+字母 Picture:指定命令按钮上显示的图片。 Default:当设置为“真”(.T.)时,按<Enter>键选择此命令按钮 Cancel:当设置为“真”(.T.)时,按<Esc>键选择此命令按钮 Enabled:指定该命令按钮是否可用。 ButtonCount :是命令按钮组的属性,指定包含命令按钮的数目。 Value:表明用户选定了第几个按钮。
7.2 控件 2. 常用事件 Click事件:鼠标单击对象时发生。 DblClick事件:鼠标双击对象时发生。 RightClick事件:鼠标右击对象时发生。 例:创建显示图书表的表单。要求用命令按钮组实现记录指针的导航,实现上一条、下一条和退出功能。 DO CASE CASE This.Value=1 SKIP -1 CASE This.Value=2 SKIP CASE This.Value=3 Thisform.Release ENDCASE ThisForm.Refresh 退出(\<Q) 退出Q ALT+Q
7.2 控件 完善命令按钮组的ClickA事件代码,实现记录指针的导航。 DO CASE CASE THIS.Value=1 IF NOT BOF() SKIP -1 ELSE MESSAGEBOX("前面没有记录了!!") ENDIF CASE THIS.Value=2 IF NOT EOF() SKIP ELSE MESSAGEBOX("后面没有记录了!!") ENDIF CASE THIS.Value=3 THISFORM.RELEASE ENDCASE THISFORM.REFRESH DO CASE CASE This.Value=1 IF NOT BOF() SKIP -1 ENDIF CASE This.Value=2 IF NOT EOF() SKIP ENDIF CASE This.Value=3 ThisForm.Release ENDCASE ThisForm.Refresh
7.2 控件 DO CASE CASE THIS.Value=1 GO TOP IF THIS.Command3.Enabled=.F. THIS.Command3.Enabled=.T. THIS.Command4.Enabled=.T. ENDIF CASE THIS.Value=2 SKIP -1 IF BOF() THIS.Command1.Enabled=.F. THIS.Command2.Enabled=.F. ENDIF IF THIS.Command3.Enabled=.F. THIS.Command3.Enabled=.T. THIS.Command4.Enabled=.T. ENDIF …… …… ENDCASE THISFORM.REFRESH
7.2.5 列表框(ListBox)与组合框(ComboBox) 列表框主要用于显示一组预先设定的值,并可以通过滚动条操作浏览列表信息,用户从列表中可以选择需要的数据。 组合框类似列表框和文本框的组合,可以在其中输入值或从列表中选择条目。组合框的Style属性可以控制是否允许用户输入数据。 它们的数据源由RowSourceType属性和RowSource属性确定。 1.常用属性 RowSourceType:决定数据源的类型。 RowSource:根据RowSourceType属性的值指定对应的数据源
7.2 控件 RowSourceType的取值及含义:
7.2 控件 例:创建一个表单,添加列表框,设置列表框的不同数据源,观察列表框中的内容。 ①设置RowSourceType 属性为1,RowSource属性为教授、副教授、讲师、助教 ②设置RowSourceType 属性为3,RowSource属性为SQL语句: Select sm,zz from ts where cbsbh=”Z014” into cursor cbs1 ③设置RowSourceType 属性为6,RowSource属性为字段 RowSource: ts.sh, sm ④设置RowSourceType 属性为8,RowSource属性为ts,显示图书表的表结构(字段名) ⑤设置RowSourceType 属性为7, RowSource属性为*.dbf, 显示当前路径下所有扩展名为.dbf 的文件。
7.2 控件 组合框与列表框的属性(续) ControlSource:用于指定所绑定的数据源。 ColumnCount:指定列的个数,默认值为0(等价于1)。 ColumnWidths:指定列宽。 BoundColumn:确定绑定列。默认为第一列与其绑定 Value:显示的值,如果是多列,Value属性的值由BoundColumn属性指定 DisplayValue:选定项的第一列内容。 ListIndex:选中数据项在列表中的位置。 ListCount:数据项的总数。 List:用于存取列表框中数据条目的字符串数组。例如,list(3,2)表示第3个条目第2列上的数据项。 Selected:指定条目是否被选中。.T.表示选中。 Sorted:指定列表中的条目是否按字母顺序自动排序 MultiSelect:指定用户能否进行多重选定。 Style:是组合框的属性,控制是否允许用户输入数据。style=0下拉组合框,允许输入和选择,style=2下拉列表框,只允许选择,不允许输入
7.2 控件 列表框与组合框(续) 2.常用事件 InterActiveChange:当用户用键盘或鼠标改变列表框或组合框中的值(选项)时发生。 Click、DblClick事件:鼠标单击和双击发生的事件。 3.常用方法 AddItem:向列表框或组合框中添加数据项。 RemoveItem:从列表框或组合框中移去数据项。 Clear:清除列表框中所有条目。 Requery:当RowSourceType设置为3或4时,可使用该方法重新运行查询以更新列表框中的条目。
7.2 控件 例:选择组合框中的读者编号,在列表框中自动显示该读者的借阅信息,显示书号、书名、借书日期。 ①数据环境中添加读者(dz)表 ②设置组合框的RowSourceType属性为“6-字段”,RowSource属性为dz.dzbh。 ③设置列表框的ColumnCount属性值为3, ColumnWidth的属性为60,70,80。 ④组合框的InterActiveChange事件中写代码: PUBLIC dzbh1 dzbh1=This.Value Thisform.list1.RowsourceType=3 Thisform.list1.Rowsource=“SELECT ts.sh,sm,jsrq FROM ts;INNER JOIN jy ON ts.sh=jy.sh AND jy.dzbh=dzbh1 INTO CURSOR xxx" Thisform.Refresh
7.2.6 选项按钮组(OptionGroup) 选项按钮组是包含多个选项按钮的容器控件。 1.常用属性 ButtonCount :是指选项按钮组中的选项按钮的数目 ControlSource:指定所绑定的数据源 Value:表示选择了第几个选项按钮 注意:单个选项按钮不能直接添加到 表单上。 2.常用事件 InterActiveChange事件:当用户用鼠标更改选项时发生。 Click:单击鼠标时发生。
7.2.7 复选框(CheckBox) 1.常用属性 Caption:指定显示在复选框旁的文本。 ControlSource:指定所绑定的数据源。通常与逻辑型字段绑定。 Value:指定控件的当前状态。其取值可以是0、1、2,分别表示未选中、选中、混合状态。Value属性也可以设置为.T. 、.F.、.NULL. Alignment:指定复选框的对齐方式,0(默认值)表示左,1表示右
7.2.8微调框(Spinner) 微调框控件可以实现给定范围内的数值输入,通过上箭头或下箭头调整输入,也可以在微调框内直接键入一个数值。 1.常用属性 KeyBoardHighValue:指定从键盘输入微调框的最大值。 KeyBoardLowValue:指定从键盘输入微调框的最小值。 SpinnerHighValue:指定通过单击微调按钮输入的最大值。 SpinnerLowValue:指定通过单击微调按钮输入的最小值。 Increment:指定单击上、下箭头时,微调控件中增加或减少的数值,默认值为1.00。 Value:当前微调框中显示的数值。 2.事件 InterActiveChange事件:当调整微调框中数值时发生。 Click:鼠标单击时发生。
7.2 控件 Spinner1的InterActiveChange事件代码为: THISFORM.Label1.FontSize=THIS.Value Check1、Check2、Check3的InterActiveChange事件代码为: THISFORM.Label1.FontBold=THIS.Value THISFORM.Label1.FontItalic=THIS.Value THISFORM.Label1.FontUnderLine=THIS.Value OptionGroup1对象的Click事件代码为: DO CASE CASE THIS.Value=1 THISFORM.Label1.FontName="宋体" CASE THIS.Value=2 THISFORM.Label1.FontName="隶书" CASE THIS.Value=3 THISFORM.Label1.FontName="黑体" CASE THIS.Value=4 THISFORM.Label1.FontName="楷体_GB2312" ENDCASE *THISFORM.Label1.FontName=this.options(value).caption 例:分别用复选框、选项按钮组和微调框控件控制标签的字型、字体、字号。
7.2.9表格(Grid) 表格是按行和列显示数据的容器对象,表格包含列标头 (Header)、列(Column)和列文本控件。 1、常用属性 RecordSource属性:指定与表格控件相绑定的数据源。 RecordSourceType属性:指定表格控件的数据源类型,如下表。
7.2 控件 表格的属性(续) DeleteMark:表格的删除标记列是否显示。 RecordMark:记录选择器列是否显示。 ScrollBars:指定所具有的滚动条类型 ColumnCount:指定列控件的数目。 AllowAddNew:指定是否可以将表格中的新记录添加到表中。 LinkMaster:指定表格控件中所显示的子表的父表的名称。 ChildOrder:用于指定为建立一对多关系的子表所用到的索引。 RelationalExpr:确定基于父表字段的关联表达式。
7.2 控件 2.表格列(Column)的常用属性 ControlSource属性:指定要在列中显示的数据 CurrentControl:指定列对象显示活动单元值的控件 Sparse属性:指定CurrentControl 属性是否仅影响列的活动单元。 还有DynamicBackColor、DynamicForeColor、DynamicFontName、DynamicFontSize等属性,利用这些属性可以动态实现一些特殊的显示效果 例如,使用SetAll 方法把表格控件的背景色设置为红绿相间。 Form1.Grid1.SetAll(“DynamicBackColor”,;”IIF(mod(Recno(),2)=0,RGB(255,0,0),RGB(0,255,0))”, “Column”)
7.2 控件 3.表格标头(Header)的属性 Caption:指定标头对象的标题文本。 Alignment:指定标题文本的对齐方式。 例创建一个表单,浏览读者的借阅信息。文本框中显示读者的编号和姓名,用表格显示该读者的借阅信息。
7.2.10页框(PageFrame) 页框主要用于扩展表单的面积或功能。页框是包含多个页面的容器。页面还是容器控件,页面上可以含有其他控件,但页面不能直接拖放到表单上。 1.页框的常用属性 PageCount:页框中包含的页面数,Pages是页框的集合属性。 Tabs:决定页面的选项卡是否可见,默认值为.T. TabStyle:指定选项卡两端或非两端对齐,默认0-两端。 ActivePage:页框控件中活动页面的编号,默认值为1。 TabStretch:1为裁剪,0为堆积,将选项卡层叠起来。 2.页面的常用属性 Caption:指定页面的标签上显示的文本。 BackColor:指定页面的颜色。
7.2 控件 在命令按钮组的Click事件中可以设置如下代码: n=This.Value IF n=4 Thisform.Release ELSE Thisform.PageFrame1.ActivePage=n ENDIF Thisform.Refresh 例:创建一个表单,表单上有一个页框控件,页框的Tabs属性为.F.,试通过单击命令按钮组中的命令按钮激活各个页面。
7.2 控件 例:创建一个表单,要求从组合框中选择读者的编号,在页框的第一页上显示读者的基本信息,第二页上显示该读者的借阅信息。 设置组合框的RowSourceType为3,RowSource为如下的SQL语句: SELECT dzbh FROM dz INTO CURSOR xx 组合框的InterActiveChange事件代码如下: PUBLIC bh1 bh1=This.Value IF USED("dz") SELECT dz ELSE USE dz ENDIF LOCATE FOR dzbh=bh1 Thisform.pf1.p1.Text1.Value=xm Thisform.pf1.p1.Text2.Value=csrq Thisform.pf1.p1.Check1.Value=gszt jsxs=lx IF jsxs="教师" Thisform.pf1.p1.Optiongroup1.Value=1 ELSE Thisform.pf1.p1.Optiongroup1.Value=2 ENDIF
7.2 控件 Thisform.pf1.p2.g1.RecordSourceType=4 Thisform.pf1.p2.g1.RecordSource="SELECT dzbh as 编号,sh as 书号,; jsrq as 借书日期,hsrq as 还书日期 ; FROM jy WHERE jy.dzbh=bh1 INTO CURSOR temp"
7.2.11计时器(Timer) 计时器是用来处理复发事件的控件。该控件设计时可见,运行时不可见。 1.常用属性 Interval:指定Timer事件发生的时间间隔,单位是毫秒。Interval为0时,计时器将不响应Timer事件。 Enabled:指定控件是否可用,属性设置为“真”(.T.)计时器启用。 2.常用事件 Timer:事件是计时器中最重要的事件。当经过Interval属性中设定的毫秒时间间隔后,此事件发生。 3.常用方法 调用Reset方法重置计时器控件,重新从零开始计时。
7.2 控件 例:新建一表单,实现每隔一秒种,随机改变颜色。 设置计时器控件的Interval属性值为1000,Enabled属性为.F.。 在计时器的Timer事件中编写如下代码: Public R,G,B R= Rand()*255 G= Rand()*255 B= Rand()*255 Thisform.Text1.BackColor=RGB(R,G,B) 2个命令按钮的Caption属性分别为“变色开始”、“变色停止”,在命令按钮1的 Click事件中编写如下代码: Thisform.Timer1.Enabled=.T. 在命令按钮2的Click事件中编写代码: Thisform.timer1.Enabled=.F. Thisform.text1.value= “红R=”+STR(R,3)+CHR(13)+ ; "绿R="+STR(G,3)+CHR(13)+ "蓝B="+STR(B,3)
7.2.12线条(Line)和形状(Shape) 线条控件用于创建水平线、竖直或对角线条。形状控件用来创建各种形状图形,包括矩形、方形、椭圆形或圆形。 1.线条控件的常用属性 BorderWidth:指定线条的线宽。 BorderStlye:指定线条的线型。 LineSlant:指定线条倾斜方向,默认值是“\”。 Width、Height:线条在水平、垂直方向投影的宽度、高度。 2.形状控件的常用属性 Curvature:用来设置形状的曲率,决定显示什么样的图形,取值范围是0~99。0用来创建矩形;99表示圆或椭圆。 FillStlye:指定用来填充形状的图案。 FillColor:指定使用的填充色。 SpecialEffect:指定控件的不同样式选项,1-平面,3-三维。 Width、Height属性:控制形状对象的宽度和高度,Width和Height相同时表示是正方形或圆。
7.2 控件 例:创建表单,用来显示各种曲率的形状。 在Check1的Click事件中代码: Thisform.Shape1.Curvature=0 在Check2的Click事件中编写代码: Thisform.Shape1.Curvature=99 在Spinner1的InterActiveChange事件 中编写代码: Thisform.Shape1.Curvature=This.Value
7.2.13 ActiveX控件 ActiveX控件分为ActiveX控件和ActiveX绑定型控件。ActiveX绑定型控件可以与表中的通用型字段绑定。 ActiveX绑定型控件常用属性有: ControlSource:设置其数据源,通常与数据表中某一通用型字段相绑定。 Stretch:设置OLE对象与 显示区域的大小比例。 它有三个取值:0、1、2
7.3 自定义类 自定义的类保存在扩展名为.vcx的类库文件中。 7.3.1 类的创建 1.使用类设计器自定义类 例:用类设计器自定义一个退出按钮类,实现“退出”功能。 新建类名:exitcmd 派生于:CommandButton 存储于:d:\vfp\tsgl\mylib.vcx Caption属性:退出, Click 事件码为:Thisform.Release。
7.3 自定义类 2.表单以及控件另存为类 “保存”栏下有三个单选按钮: 选定控件。若用户未选中表单中的控件,则该按钮不可选。 当前表单。 整个表单集。若当前没有创建表单集,则该按钮不可选
7.3 自定义类 3.使用命令定义类 创建类库文件的命令是: CREATE CLASSLIB 类库名 创建新类的命令是: CREATE CLASS 类名OF 类库AS 基类名 例如:创建一个类库lib1,在lib1中定义新类tt1,派生于TextBox。 CREATE CLASSLIB lib1 CREATE CLASS tt1 OF lib1 AS TextBox 创建的新类tt1保存在类库lib1.vcx文件中。
7.3.2 类的修改 1.使用“项目管理器”修改类 2.利用【文件】菜单修改类 3.使用命令修改类 命令格式:MODIFY CLASS <类名> OF <类库名>
7.3.3 为类添加属性 选择菜单【类】→【新建属性】 新属性的默认属性值为.F. “可视性”有公共、保护或隐藏三种选择 7.3.4 为类添加方法 选择【类】→【新建方法程序】菜单项 新的方法程序为“默认过程”
7.3.5 类的应用 添加类到表单 直接添加 2. 注册类库后添加类到表单上 3. 指定数据库表字段 4. 指定表单和表单集的模板类
7.3.6 覆盖默认属性设置 例如,在类设计器中,创建一个派生于文本框类的自定义类tb,设置tb的背景色为红色。然后新建一个表单,将自定义类拖放到表单上,拖放2个对象tb1、tb2,设置tb1的背景色为蓝色,tb2的背景色不改变,保存运行表单,表单上两个文本框的颜色分别是蓝色和红色。然后在类设计器中,修改自定义类tb的背景色为绿色,则再次运行表单时,表单上的两个文本框的颜色分别是蓝色和绿色。
7.3.7 调用父类方法程序代码 用户如果在为新类或对象添加新功能的同时,仍然要保留父类的功能,可使用函数Dodefault()或作用域操作符“::”调用父类的程序代码。 调用同名的方法程序用Dodefault()。当调用父类的不是同名的方法程序时只能用“::”调用父类的程序代码。 例如,在RightClick事件中调用父类的Click事件代码时,使用“::”调用。
7.3.8 以编程方式定义和使用类 定义类的命令格式是: DEFINE CLASS 类名AS 父类名 [属性名=表达式] …… [ADD OBJECT 对象名AS 类名] …… [PROCEDURE 过程名 …… ENDPROC] ENDDEFINE
7.3 自定义类 例:定义一个表单类myform,设置表单的Caption属性为“我的表单”,在myform上添加一个命令按钮cmdinf,该对象派生于基类CommandButton,设置该对象的Caption属性为“提示”,单击该按钮,出现消息框,提示单击了该按钮。 DEFINE CLASS myform AS Form Caption="我的表单" Backcolor=RGB(0,0,128) ADD OBJECT cmdinf AS CommandButton Cmdinf.caption="提示" Cmdinf.top=100 Cmdinf.left=150 PROCEDURE cmdinf.Click Messagebox(“你单击了提示按钮”) ENDPROC ENDDEFINE
7.3 自定义类 例:基于自定义类myform创建一个表单对象。 mf=CREATEOBJECT("myform") mf.Show mf.ADDOBJECT(“label1”,”LABEL”) mf.label1.Caption=”欢迎使用,再见” mf.label1.FontSize=20 mf.label1.Autosize=.T. mf.label1.Visible=.T. mf.label1.BackColor=RGB(255,0,0) READ EVENTS
7.3 自定义类 DEFINE CLASS myform AS Form Caption="我的表单" Backcolor=RGB(255,255,0) ADD OBJECT cmdinf AS CommandButton Cmdinf.Caption=”提示” Cmdinf.Top=100 Cmdinf.Left=120 Cmdinf.Width=80 Cmdinf.Height=25 PROCEDURE cmdinf.Click Messagebox(“你单击了提示按钮”) CLEAR EVENTS ENDPROC ENDDEFINE
7.4 小型案例实训 试设计一个表单,用于标准化考试的练习。练习的题型是选择题,每道题有四个选项,其中有一个选项是正确的,一批练习结束后,出现消息框提示正确率情况。 1.创建表结构