1、http:/ 面向对象程序设计 概念与入门(时间:4次课,8学时)第第2 2章章 面向对象程序设计概念与入门面向对象程序设计概念与入门 n教教学学提提示示:在在这这一一章章里里,我我们们将将学学习习面面向向对对象象程程序序设设计计的的基基本本概概念念,认认识识程程序序的的核核心心是是由由对对象象和和响响应应各各种种事事件件的代码组成的。的代码组成的。n本本章章主主要要介介绍绍:表表单单与与一一些些基基本本控控件件的的特特点点、创创建建方方法法和和使使用用方方法法。对对象象的的三三要要素素:属属性性、事事件件和和方方法法。面面向向对对象象的的程程序序设设计计就就是是从从这这三三要要素素入入手手,
2、设设置置属属性性、使使用用方法、编制事件过程代码以驱动程序运行。方法、编制事件过程代码以驱动程序运行。第第2 2章章 面向对象程序设计概念与入门面向对象程序设计概念与入门 n2.1 对对 象象 和和 类类 n2.2 对象的属性、事件和方法对象的属性、事件和方法n2.3 表表 单单 n2.4 表单上的常用控件表单上的常用控件 n2.5 上上 机机 指指 导导n2.6 习习 题题2.1 对对 象象 和和 类类 n2.1.1 2.1.1 对象对象 n2.1.2 2.1.2 类类 2.1.1 对象对象 日常生活中对象的例子:一辆汽车一张桌子一台电脑在可视化编程中,对象是应用程序的基本元素,常见的对象有
3、表单、文本框、列表框等。从可视化编程的角度来看,对象是一个具有属性(数据)和方法(行为方式)的实体。主板CPU内存显示器2.1.2 类类 1.类的概念2.类(Class)是对一组对象的属性和特征的抽象描述,即是对于拥有数据和一定行为特征的对象集合的描述。3.类是抽象的,而对象是具体的,它们既有区别又有联系。2.类的特征 类是对象的抽象,是具有相同属性和特征的对象的集合,类是一个模板,对象由它生成。(1)类的继承性(2)类的封装性(3)类的多态性2.2 对象的属性、事件和方法n2.2.1 2.2.1 对象的属性对象的属性 n2.2.2 2.2.2 方法方法 n2.2.3 2.2.3 事件事件 2
4、.2.1 对象的属性 每个对象都有其特征,在计算机程序语言中叫做属性(Property)。设置对象的属性一般有两条途径:(1)如果在程序设计时设置对象的属性,则需要使用属性窗口。2.2.1 对象的属性(2)如果要在程序运行中更改对象的属性,可以使用VisualFoxPro的赋值语句。格式为:=2.2.2 方法 对象中除了属性之外,还包含一些控制对象的动作或功能。以气球为例,假设气球这个对象有3个动作,分别是充气(用氢气充满气球)、放气(排出气球中的气体)、上升(放手让气球飞走)。这3个动作都是气球这个对象所提供的功能,以程序设计术语来说,就是对象所提供的方法(Method)。Visual Fo
5、xPro的方法用于完成某种特定功能。Visual FoxPro的方法也属于对象的内部函数,如添加对象(AddObject)方法、绘制矩形(Box)方法、释放表单(Release)方法等。方法被“封装”在对象之中,不同的对象具有不同的内部方法。Visual FoxPro提供了百余个内部方法供不同的对象调用。在程序中调用对象方法的格式如下:=.()2.2.3 事件 1.事件的概念 对于对象而言,事件(Event)就是发生在该对象上的事情。VisualFoxPro中提供了许多对象,让用户利用它们来设计应用程序。不同的对象能够识别不同的事件。2.事件过程 3.处理事件的步骤就是事件过程(EventPr
6、ocedure)。事件过程是针对事件的,而事件过程中的处理步骤在VisualFoxPro程序设计中就是所谓的程序代码。2.2.3 事件 3.事件驱动程序设计 4.程序在执行时会先等待某个事件的发生,然后再去执行处理此事件的事件过程,事件过程要经过事件的触发才会被执行。这 种 动 作 模 式 就 称 为 事 件 驱 动 程 序 设 计(Event DrivenProgrammingModel),也就是说,由事件控制整个程序的执行流程。1.(1)等待事件的发生。2.(2)事件发生时,执行相应的事件过程。4.事件的程序调用 5.事件过程由事件的激发而调用其代码,也可以在运行中由程序调用其代码,在程序
7、中调用事件代码的格式如下:6.2.3 表 单 n2.3.1 2.3.1 表单设计器表单设计器 n2.3.2 2.3.2 表单对象表单对象 n2.3.3 2.3.3 对象的引用对象的引用 n2.3.4 2.3.4 保存、修改及运行表单保存、修改及运行表单 2.3.1 表单设计器 1.打开【表单设计器】选择【文件】|【新建】或单击常用工具栏上的【新建】按钮,弹出【新建】对话框,选中【表单】单选按钮,然后单击【新建文件】按钮。在命令窗口中使用CREATEFORM命令。2.【表单设计器】工具栏【表单设计器】工具栏中包括设计表单时要用的所有工具按钮。把鼠标指针移到工具栏的某按钮上,就会出现该工具按钮的名
8、称。2.3.1 表单设计器 3.【表单控件】工具栏 单击【表单设计器】工具栏上的【表单控件工具栏】按钮,打开【表单控件】工具栏。2.3.2 表单对象 表单(Form)是应用程序的用户界面,也是进行程序设计的基础。各种图形、图像、数据等都是通过表单或表单中的对象显示出来的,因此表单是一个容器对象。1.表单的结构2.3.2 表单对象 2.表单的属性属性名作 用AutoCenter用于控制表单初始化时是否总是位于Visual FoxPro窗口或其父表单的中央BackColor用于确定表单的背景颜色BorderStyle用于控制表单是否有边框:系统(可调)、单线、固定边框、无边框等Caption表单的
9、标题Closable用于控制表单的标题栏中的关闭按钮是否能用ControlBox用于控制表单的标题栏中是否有控制按钮MaxButton用于控制表单的标题栏中是否有最大化按钮MinButton用于控制表单的标题栏中是否有最小化按钮Movable用于控制表单是否可移动TitleBar用于控制表单是否有标题栏WindowState用于控制表单是最小化、最大化还是正常状态WindowType用于控制表单是模式表单还是无模式表单(默认),若表单是模式表单,在访问Windows屏幕中其他任何对象前必须关闭该表单2.3.2 表单对象 3.表单的事件与方法事 件含 义说 明Load事件当表单被装入内存时发生事
10、件被激发的顺序为Load、Init、ActivateInit事件当表单被初始化时发生Activate事件当表单被激活时发生Unload事件当表单被关闭时发生事件被激发的顺序为Destroy、UnloadDestroy事件当表单被释放时发生Resize事件当用户或程序改变表单的大小时发生方 法含 义Hide方法隐藏表单Show方法显示表单Release方法释放表单Refresh方法刷新表单2.3.3 对象的引用 对象的引用方式就是在过程代码中表示该对象的方法,一般说是通过对象的名称来引用对象,但要注意对象的包含层次。引用时有绝对引用和相对引用之分。1.对象的包容层次 Visual FoxPro中
11、的对象根据它们所基于的类的性质可分为两类:容器类对象和控件类对象。(1)容器类对象:可以包含其他对象,并且允许访问这些对象,例如表单集、表单、表格等。(2)控件类对象:只能包含在容器对象之中,而不能包含其他对象,例如命令按钮、复选框等。2.对象的引用如(1)绝对引用 通过提供对象的完整容器层次来引用对象称为绝对引用。(2)相对引用在容器层次中引用对象时,可以通过快捷方式指明所要处理的对象。2.3.4 保存、修改及运行表单 1.保存表单 系统默认的表单文件的扩展名为.scx,表单备注文件的扩展名为.sct。在保存表单文件时系统给出默认文件名“表单1”。l使用菜单:选择【文件】|【保存】命令。l使
12、用工具栏:单击常用工具栏上的保存按钮。l关闭表单设计器时,系统会对未作保存的表单给出保存提示。2.运行表单l在表单界面上右击,从弹出的快捷菜单中选择【执行表单】。l单击常用工具栏的按钮。l在命令窗口中键入“DO FORM”。l使用菜单:选择【程序】|【运行】命令,在【运行】对话框中选择【文件类型】为【表单】,选中要运行的表单文件,单击【运行】按钮。3.修改表单 2.3.4 保存、修改及运行表单 3.修改表单 l选择选择【文件】【文件】|【打开】【打开】命令或单击常用工具栏中的打开按命令或单击常用工具栏中的打开按钮,在打开的对话框中选择要修改的表单文件。钮,在打开的对话框中选择要修改的表单文件。
13、l在命令窗口中键入命令:在命令窗口中键入命令:“MODIFY FORM”。l在运行表单后,单击常用工具栏中的按钮,也可对表单进行在运行表单后,单击常用工具栏中的按钮,也可对表单进行修改修改 2.4 表单上的常用控件表单上的常用控件 n2.4.1 2.4.1 对象的基本属性对象的基本属性 n2.4.2 2.4.2 标签标签(Label)(Label)n2.4.3 2.4.3 命令按钮命令按钮(Commandbutton)(Commandbutton)n2.4.4 2.4.4 文本框与编辑框文本框与编辑框(Textbox,Editbox)(Textbox,Editbox)n2.4.5 2.4.5
14、计时器计时器(Timer)(Timer)n2.4.6 2.4.6 复选框复选框(Check)(Check)与选项按钮组与选项按钮组(Optiongroup)(Optiongroup)n2.4.72.4.7 组合框组合框(Combo)(Combo)与列表框与列表框(List)(List)n2.4.2.4.8 8 页框页框(PageFrame)(PageFrame)、图像、图像(Image)(Image)及其他及其他 2.4.1 2.4.1 对象的基本属性对象的基本属性 1.Name属性 名称属性:这个属性是所有对象都有的属性,指定在代码中引用对象时所用的对象名。创建对象时VisualFoxPro
15、自动提供一个默认名称该对象的类型加上一个惟一的整数。例如:第一个新建表单对象的名称为Form1,在同一表单上创建的第二个文本框缺省名为Text2。在程序中,对象名称是作为对象的标识在程序中被使用,而不会显示在对象上。该属性在对象设计时可用,运行时可读写。2.Caption属性 标题属性:这个属性决定了对象上显示的内容,属性值为字符型,标题文本需放在西文引号中。2.4.1 2.4.1 对象的基本属性对象的基本属性 3.布局属性(1)Height、Width、Top和left属性 这四个属性反映了对象的外部尺寸与相对位置,属性值为数值型。2.4.1 2.4.1 对象的基本属性对象的基本属性 (2)
16、AutoCenter属性指定表单对象第一次显示在VisualFoxPro主窗口时,是否自动居中放置。属性值为逻辑型。当设置为“真”(.T.)时,表单对象置于中央,并且依据当前位置重新设置Top和Left属性值;当设置为“假”(.F.)时(默认值为“假”),表单对象并不置于中央,并且依据Top和Left属性值确定的坐标放置表单对象。(3)AutoSize属性指定控件是否依据其内容自动调节大小。属性值为逻辑型。当设置为“真”(.T.)时,控件依其内容自动调节大小;当设置为“假”(.F.)时,当控件内容超过控件区域时,只显示一部分内容,控件大小保持不变。2.4.1 2.4.1 对象的基本属性对象的基
17、本属性 (4)AlwaysOnTop属性指定表单是否可被其他窗口所覆盖。属性值为逻辑型。当设置为“真”(.T.)时,表单总是显示在最顶层(只有AlwaysOnTop属性设为“真”的窗口可显示在表单之上);当设置为“假”(.F.)时,表单可被其他窗口覆盖。该属性在设计时可用,在运行时只读。(5)Desktop属性指定表单是否放在Visual FoxPro主窗口中。属性值为逻辑型。当设置为“真”(.T.)时,表单可放在Windows桌面的任何位置;当设置为“假”(.F.)时,表单包含在Visual FoxPro主窗口中。该属性在表单设计时可用,运行时只读。2.4.1 2.4.1 对象的基本属性对象
18、的基本属性 4.修饰属性(1)Font系列属性FontName、FontBold、FontItalic、FontStrikethru、FontUnderline、FontSize。(2)BackColor、ForeColor属性指定对象显示文本或图形的背景色或前景色。(3)BackStyle属性指定一个对象的背景是否透明。(4)Picture属性指定在控件中显示的位图文件。(5)Curvature属性指定形状控件的弯角曲率。(6)BorderStyle属性指定对象的边框样式。2.4.1 2.4.1 对象的基本属性对象的基本属性 4.状态属性(1)Enabled属性指定该对象能是否允许操作,是否
19、响应用户触发的事件。(2)Visible属性指定对象是可见还是隐藏。(3)ReadOnly属性指定用户是否可以编辑一个控件或者更新与临时表对象相关联的表或视图。(4)Default属性按下Enter键,则会有某一个命令按钮作出响应。2.4.2 标签(Label)标签控件是按一定格式显示在表单上的文本信息,常用来显示表单中各种说明和提示。如文本框(Textbox)和微调按钮(Spinner)这些没有自己的Caption属性的控件,可以用Label标识。标签的特点是不能直接编辑,只能通过Caption属性的设置来改变其显示内容,因此不能用它作为输入信息的界面,它没有数据源。1主要属性(1)Capt
20、ion在Label中实际显示的文本是由Caption属性控制的,该属性可以在设计时在【属性】窗口中设置或在运行时用代码赋值。(2)Left、Top可以通过这两个属性确定Label的位置。(3)BackColor、BackStyle、ForeColor和Font系列属性可以通过这些属性改变Label的外观。(4)AutoSize、WordWrap改变Label尺寸以适应其内容(较长或较短的标题)。2.4.2 标签(Label)2事件 标签经常接收的事件有:单击(Click)、双击(DblClick)、和改变(Change)。但实际上标签仅起到显示文本的作用,一般不需编写事件过程。3举例例例2.1
21、 设计一个简易表单,其中包含两个标签控件,运行效果如图2.4.2所示。三个对象的属性设置见表2.4.2。2.4.2 标签(Label)具体步骤简述如下:(1)创建表单。(2)在表单上创建标签控件。(3)设置属性。控件名(Name)标题(Caption)前景色(ForeColor)背景色(BackColor)背景样式(BackStyle)自调尺寸(AutoSize)文本卷绕(WordWrap)Form1标签示例0,0,0255,128,64Label1显示文本信息255,0,0255,255,01不透明TrueFalseLabel2Visual oxPro 实用教程0,0,0192,192,19
22、20透明TrueTrue2.4.2 标签(Label)具体步骤简述如下:(4)调整标签的位置。(5)保存表单。(6)运行表单。本例中的两个标签分别设计成背景样式透明和不透明两种,对比可看出效果的不同;Label2使用了WordWrap属性为真的设置,有利于对这一属性的理解,为达到图2.4.2中显示的效果,在Caption文本中加入了空格。2.4.3 命令按钮(Commandbutton)使用命令按钮是使用户与应用程序交互的最简便的一个方法。CommandButton控件可以用来启动、中断或结束一个进程。在应用程序中,命令按钮的应用十分广泛。在程序执行期间,当用户选择某个命令按钮时,就会执行相应
23、的事件过程代码。通常有几种方法可以选中命令按钮:用鼠标单击;按Tab键将焦点移动到相应按钮上,再按回车键;使用快捷键(Alt+有下划线的字母)。1主要属性Caption在按钮上显示的文字。Height、Width、Left、Top可以通过这几个属性确定命令按钮的大小和位置。Picture可以通过这个属性改变命令按钮的外观,该属性可显示图形文件(.bmp和.ico)。ToolTipText与Picture属性同时使用,设置提示文本。Default 和 Cancel当表单上有多个按钮可选择一个命令按钮作为默认的命令按钮。2.4.3 命令按钮(Commandbutton)2事件命令按钮主要接收单击(
24、Click)事件。3举例例例2.2 设计一个简易表单,其中包含四个命令按钮控件,运行效果如图2.4.3所示。要求运行时按下【确定】按钮,调用例2.1所制作的表单,按下【取消】按钮释放表单,按下【图片】按钮使【显示】按钮变灰,不能使用。相关的属性设置见表2.4.3。2.4.3 命令按钮(Commandbutton)表2.4.3例2.2属性设置:控件名(Name)标题(Caption)图片(Picture)单击事件过程(Click)Form1命 令 按 钮示例d:学生管理系统图片clouds.bmp(无)Cmd1显示(无)(无)Cmd2确定(无)doformvfp0201&调用表单Cmd3取消(无
25、)thisform.release&释放表单Cmd4(无)d:学生管理系统图片h_point.curthisform.cmd1.enabled=.f.&cmd1不可用2.4.3 命令按钮(Commandbutton)具体步骤与上一例题大致相同,下面简述不同之处:(1)创建第一个CommandButton控件以后,可以通过选中、复制、粘贴三个步骤,再创建另外两个CommandButton控件,这样就得到了三个标题一样、尺寸相同但名称各异的命令按钮。这种作法的优点是,三个按钮的外观一致。(2)利用菜单调整布局方式。先按住Shift键,连续选中Cmd1、Cmd2、Cmd3三个命令按钮,然后选择【格式
26、】|【垂直间距】|【相同距离】命令,把三者间距调好。(3)编写事件过程代码。选中要写代码的对象,双击,打开代码窗口,如图2.4.4所示。左边【对象】下拉列表框中显示的是当前选中的按钮控件名,在右边的【过程】下拉列表框中选择Click事件,然后在代码框中书写代码。书写完毕关闭代码窗口。(4)保存表单文件,名为vfp0202.scx。(5)运行表单时,分别单击四个按钮,观察其运行结果。2.4.4 文本框与编辑框(Textbox,Editbox)文本框(Textbox)主要用于数据表某些字段的输入、输出,以及从窗口给内存变量赋值等操作。文本框中含有一行文本。编辑框(Editbox)在表单上也是用于接
27、收输入文本或查看文本的控件。编辑框可以包含多行文本。在文本框和编辑框中可以使用标准的编辑功能,如剪切、复制、粘贴等。1主要属性Value文本框输入或输出的数据值。Format指定Value属性的输出格式。InputMask指定在控件中如何输入和显示数据。ReadOnly确定文本框中的数据是否只读。PasswordChar指定用作占位符的符号。TabIndex指定Tab键的次序,即按Tab键时焦点在控件上移动的顺序。2.4.4 文本框与编辑框(Textbox,Editbox)SelStart、SelLength、SelText选中文本的起始位置、选中文本的长度、选定文本的内容。这几个属性只能在程
28、序运行中用赋值语句设置。2事件与方法SetFocus方法获得焦点,执行此方法可把插入点移到此文本框。GotFocus事件当对象获得焦点时发生。LostFocus事件当对象失去焦点时发生。InteractiveChange事件 通过键盘输入或鼠标操作改变文本框的值时即刻发生。Valid事件该事件发生在控件失去焦点以前(顺序在LostFocus事件之前)。2.4.4 文本框与编辑框(Textbox,Editbox)ProgrammaticChange事件该事件在赋值语句改变文本框的Value属性时发生。KeyPress事件当用户按下并且释放键盘上的一个键时,引发该事件,每输入一个字符就会引发一次。
29、此事件会返回一个参数nKeyCode到该事件过程中。3举例 例例2.3 设计一个表单,在表单上有文本框和编辑框等控件。要求用户输入正确密码以后,激活两个编辑框,用户可由“原文”处选择有用内容复制到“摘要”处,原文显示内容不能被用户修改。按“确定”按钮,接收摘要内容,按“取消”按钮放弃操作。2.4.4 文本框与编辑框(Textbox,Editbox)运行结果如图2.4.5所示,相关的属性设置见表2.4.4,相关的事件代码见表2.4.5。2.4.4 文本框与编辑框(Textbox,Editbox)表2.4.4例2.3的属性设置:控件名(Name)标题(Caption)是否可用(Enabled)Ta
30、b键次序(TabIndex)其他Form1文本框编辑框示例.t.(默认)1Label1密码.t.(默认)6Label2原文.t.(默认)7Label3摘要.t.(默认)8Text1.t.(默认)1PasswordChar=*Edit1.f.2ReadOnly=.t.真Edit2.f.3Command1确定.t.(默认)4Command2取消.t.(默认)52.4.4 文本框与编辑框(Textbox,Editbox)表2.4.5例2.3的事件过程代码:控件名事件过程代码Form1初始化(Init)publictxt1,txt2txt1=张宏同学在上小学六年级时被评为市级三好学生。2000年加入中
31、国共产主义青年团。Text1失去焦点(LostFocus)ifUpper(this.text)=ABCDthisform.edit1.enabled=.t.thisform.edit2.enabled=.t.thisform.edit1.value=txt1thisform.edit1.disabledBackColor=rgb(0,255,255)&青色endifCommand1单击事件过程(Click)txt2=thisform.edit2.valuethisform.releaseCommand2单击事件过程(Click)txt2=thisform.release2.4.4 文本框与编辑
32、框(Textbox,Editbox)主要步骤和设计要点:(1)让几个控件尺寸相同可通过复制手段或设置相同Height、Width属性的方法;控件的对齐方式可用【格式】菜单或布局工具栏上按钮调整,前面已讲不再赘述。(2)Text1用于输入密码,密码输入时是不愿被别人看到的,所以使用掩码的形式,将PasswordChar属性设置为“*”;判断密码是否正确,用了IfEndif选择结构,(详见第5.3节),若输入的密码正确,就执行选择结构中的四条语句,若不正确,什么也不做;密码设为“ABCD”,判断条件里用了转换大写字母函数,即认为用户不论输入“ABCD”还是“abcd”都正确;这些代码写在Text1
33、的LostFocus事件中,当用户将焦点移出Text1时(如按回车键时)起作用。2.4.4 文本框与编辑框(Textbox,Editbox)(3)Edit1和Edit2两个编辑框,初始设为不可用状态,待密码正确时改为可用状态;Edit1用于显示原文,为使之不能被改,设置为只读;为明显区分两个文本框功能和状态的不同,将Edit1的失效时背景色设置为青色。(4)为存放原文和摘抄内容,在Form1的Init事件中声明了全局变量txt1,txt2(关于全局变量的概念详见第5.5节),并为txt1赋了值;在Command1的Click代码中,将摘抄内容赋给了txt2,在Command2的Click代码中
34、,将Edit2的值清空。(5)表单中的控件中,Text1的TabIndex设置为1,是为保证运行时焦点落在Text1上,而表单的TabIndex值为1是默认值,是针对表单集而言的,本例不涉及。2.4.5 计时器(Timer)计时器是在应用程序中用来处理复发事件的控件。设计时可见,而在运行时不可见。计时器控件与用户的操作独立。它对时间作出反应,可以让计时器以一定的间隔重复地执行某种操作。1主要属性IntervalTimer 事件之间的毫秒数。考虑到内部误差,一般将间隔设置为所需精度的一半。但尽量不要设置太小的时间间隔。Enabled对大多数对象来说,Enabled 属性决定对象是否能对用户引起的
35、事件作出反应。对计时器控件来说,将 Enabled 属性设置为“假”(.F.),会挂起计时器的运行。若想让计时器在表单加载时就开始工作,应将这个属性设置为“真”(.T.),否则应将这个属性设置为“假”(.F.)。也可以选择一个外部事件(如命令按钮的 Click 事件)启动计时器操作。2.4.5 计时器(Timer)2事件Timer近似等间隔(Interval指定的间隔)激活的事件。3举例例例2.4设计一个表单,用计时器控件实现两个标签的动画效果。要求:“欢迎使用”四个字闪动,“谢谢惠顾”四个字向左移动,直至消失,再从右侧露出,继续向左移动。两个按钮分别控制动画效果的暂停和恢复。2.4.5 计时
36、器(Timer)表2.4.6例2.4的属性设置:控件名(Name)标题(Caption)字体(FontName)字号(FontSize)前景色(ForeColor)其他主要属性Form1计时器示例宋体9rgb(0,0,0)BackColor=rgb(255,255,0)Label1欢迎使用黑体20rgb(255,0,0)&红色AutoSize=.T.真BacdStyle=0透明Label2谢谢惠顾楷体14rgb(0,0,255)&蓝色AutoSize=.T.真BackStyle=0透明Timer1Interval=300Timer2Interval=100Command1恢复宋体12rgb(0
37、,0,0)TabIndex=2Command2停止宋体12rgb(0,0,0)TabIndex=12.4.5 计时器(Timer)表2.4.7例2.4的事件过程代码:控件名(Name)初始化(Init)Timer(LostFocus)单击事件过程(Click)Timer1publicflagflag=1ifflag=1thisform.label1.forecolor=rgb(255,0,0)elsethisform.label1.forecolor=thisform.backcolorendifflag=-flagTimer2(无)thisform.label2.left=thisform.
38、label2.left-2ifthisform.label2.left=-thisform.label2.widththisform.label2.left=thisform.widthendifCommand1(无)thisform.timer1.interval=300thisform.timer2.interval=100Command2(无)thisform.timer1.interval=0thisform.timer2.interval=02.4.5 计时器(Timer)主要步骤和设计要点:(1)创建计时器Timer1和Timer2,把它们放在适当位置,因为运行时它们是不可见的,所
39、以大小、位置并不重要。Timer1针对Label1,Timer2针对Label2。(2)Label1的时隐时现的闪动效果是由改变它的前景色来实现的。当把前景色设置为与背景色相同,就形成了“隐”,时间间隔0.3秒以后,让前景色再变回原来的红色,就产生了“现”,往复交错就有了闪动的效果。具体是由Interval属性激活Timer事件来完成。(3)Label2的移动效果是靠左边界的改变来实现的。每次的Timer事件发生,左边界减少一点。如果Label2的右边界移动到表单的左边界以左,就重设它的左边界等于表单的宽度。2.4.5 计时器(Timer)主要步骤和设计要点:(4)两个按钮的单击事件中分别设置
40、了两个计时器的Interval属性,当Interval=0时,就不能激活Timer事件,从而达到了停止的效果。(5)在Timer的Init事件中声明了全局变量flag,并设初值为1。每一次执行Timer1的Timer事件,改变它的符号,根据flag的不同值决定Label1的前景色的变化。2.4.6 复选框(Check)与选项按钮组(Optiongroup)为用户提供一组预先设定的选项,可以用复选框或选项按钮组。这样可以控制用户的选择,防止存储无效数据。1主要属性Caption设置复选框或选项按钮组的文本注释内容,即复选框和选项按钮组边上的文本标题。Alignment设置标题和按钮相对位置。值为
41、0,表示控件按钮在左边,标题显示在右边(默认值);值为1,表示控件按钮在右边,标题显示在左边。Value指定复选框或选项按钮组的状态。l选项按钮组:值为0表示未被选中;值为1表示被选中。l复选框:值为0表示未被选中;值为1表示被选中;值为2表示禁止用户选择(变灰)。Style指定复选框或选项按钮组的显示方式,用于改善视觉效果。值为0表示标准方式;值为1表示图形方式,外表与按钮相同。2.4.6 复选框(Check)与选项按钮组(Optiongroup)2.事件Click复选框和选项按钮组都能接收这一事件。当用户单击复选框或选项按钮组的单选按钮时,它们会自动改变状态。3.举例 例例2.5设计表单,
42、表单上创建选项按钮组和复选框。要求利用选项按钮组选择大标题的字体,利用复选框选择是否显示副标题,表单的运行效果如图2.4.7所示。2.4.6 复选框(Check)与选项按钮组(Optiongroup)主要步骤和设计要点:(1)用生成器创建选项按钮组。从表单控件工具栏选择选项按钮组控件,放置在表单合适位置上;右击选项按钮组,选择【生成器】命令;【选项按钮组生成器】对话框共有三个选项卡,其中【按钮】选项卡、【布局】选项卡如图2.4.8所示,【值】选项卡本例不涉及。填写选项卡上的相关内容,方便直观地设置属性。其中在【按钮】选项卡上若不选择【标准】而选择【图形】单选按钮,选项按钮组的外观将会变为和命令
43、按钮一样。在图形一栏可设置按钮的Picture属性。2.4.6 复选框(Check)与选项按钮组(Optiongroup)主要步骤和设计要点:(2)Optiongroup1是容器类,Option是它包含的对象。若想在表单上选中Optiongroup1中的某一个选项钮进行设计,应用鼠标指向Optiongroup1后右击弹出快捷菜单,选【编辑】一项,选项按钮组周围出现虚框,此时可单击选中任一选项钮。(3)Optiongroup1的Value属性值设置为n,是指定第n个按钮是被选中状态,若为0,则没有被选中的单选钮。Option中的Value属性表示该单选钮当前的状态是否被激活,属性值为0或1,若干
44、个单选钮中只能有一个其值为1,其余全都为0。2.4.6 复选框(Check)与选项按钮组(Optiongroup)表2.4.8例2.5主要属性设置:控件名主要属性Form1Caption=选项按钮组及复选框示例Label1Caption=面向对象的程序设计;FontSize=24Label2Caption=单选钮、复选框示例;FontSize=16;Visible=.F.Command1Caption=返回Check1Caption=显示副标题;BackStyle=0透明;FontSize=12Value=0Optiongroup1Value=1;ButtonCount=4Optiongrou
45、p1.Option1Caption=宋体;BackStyle=0透明;FontSize=12;Value=1.Option2Caption=黑体;BackStyle=0透明;FontSize=12;Value=0.Option3Caption=隶书;BackStyle=0透明;FontSize=12;Value=0.Option4Caption=楷体;BackStyle=0透明;FontSize=12;Value=02.4.6 复选框(Check)与选项按钮组(Optiongroup)表2.4.9 例2.5事件过程代码:控件名(Name)单击(Click)OptionGroup1.Option
46、1thisform.label1.fontname=宋体thisform.label2.fontname=宋体.Option2thisform.label1.fontname=黑体thisform.label2.fontname=黑体.Option3thisform.label1.fontname=隶书thisform.label2.fontname=隶书.Option4thisform.label1.fontname=楷体_GB2312thisform.label2.fontname=楷体_GB2312Check1ifthis.value=1thisform.label2.visible=.
47、t.elsethisform.label2.visible=.f.endifCommand1thisform.release2.4.6 复选框(Check)与选项按钮组(Optiongroup)主要步骤和设计要点:(4)Label2的Visible属性初始设置为.F.,而Check1的Value属性初始设置为0,这是相一致的,不会出现运行初始的矛盾状况。(5)Optiongroup1的Value属性初始值设置为1,Label1的FontName属性初始值设置为“宋体”,这也是相一致的,不要产生矛盾。Optiongroup1的Value属性初始值设置最好不要设为0,作为单选钮应至少有一个选项被选
48、中。(6)选项按钮组和复选框都是有Caption属性的,所以不用设计标签控件为其做解释说明。2.4.7 组合框(Combo)与列表框(List)列表框用于从列表中选中待选条目;组合框类似于列表框和文本框的组合,既可以在其中输入值又可以从列表中选择条目。通常,如果表单上有足够的空间,并且想强调可选择项,应考虑使用列表框;要想节省空间,并且想强调当前选定的项,则使用下拉列表框更合适。1主要属性(1)列表框Value数据项的值,可以是数值型,也可以是字符型,默认值为数值型。ColumnCount列表框的列数。ControlSource用户从列表中选择的值保存在何处。MoverBars是否在列表项左侧
49、显示移动钮栏,这样有助于用户更方便地重新安排列表中各项的顺序。MultiSelect用户能否从列表中一次选择一个以上的项。RowSource列表中显示的值的来源。RowSourceType确定RowSource是下列哪种类型,一个值、表、SQL语句、查询、数组、文件列表或字段列表。2.4.7 组合框(Combo)与列表框(List)1主要属性(2)组合框Style指定组合框类型。其中,0(默认值)为下拉组合框;1为下拉列表框。DisplayValue组合框或列表框中选定数据项的第一列内容。ControlSource用于保存用户选择的表字段或输入的表字段。DisplayCount指定在列表中允许
50、显示的最大项数。InputMask指定下拉组合框允许键入的数值类型。RowSource指定组合框中项的数据源。RowSourceType指定组合框中数据源类型。参见列表框的该属性。2事件InteractiveChang通过键盘输入或鼠标操作改变组合框或列表框的选项值时即刻发生。AddItem给 RowSourceType 属性为 0 的列表添加一项。RemoveItem从 RowSourceType 属性为 0 的列表中删除一项。Requery当 RowSource 中的值改变时更新列表。2.4.7 组合框(Combo)与列表框(List)3.举例例2.6 设计表单,表单上放有列表框和组合框。