VisualFoxpro表单设计与应用.ppt
第八章Visual FoxPro 表单设计与应用,表单设计与应用,本章主要介绍Visual FoxPro面向对象的基本概念、基类的基本概念、表单的基本概念及创建和管理、表单设计器的基本操作、表单控件的基本操作等。,一、面向对象的基本概念,Visual FoxPro不但继续支持面向过程的程序设计,而且在语言上进行了扩展,提供了面向对象程序设计的强大功能和更大的灵活性。面向对象的程序设计方法与编程技术不同于标准的过程化程序设计。程序设计人员在进行面向对象的程序设计时,不再是单纯地从代码的第一行一直编到最后一行,而是考虑如何创建对象,利用对象来简化程序设计,提供代码的重用性。,(一)、对象与类,1、对象(Object):简单地说就是一个实体。客观世界里的任何实体都可以被视为对象。对象可以是具体事件,也可以指某些概念。A、任何对象都具有自己的对象属性、对象方法。属性用来表示对象的状态,方法用来描述对象的行为。B、对象生成命令格式:CREATE OBJECT(,)C、对象属性访问、对象方法调用命令格式:.()D、对象引用的属性或关键字:,2、类(Class):面向对象的程序设计是一种封装代码,代码可重用性和可维护性都较好,其中最基本的封装代码称为类,类是对一类相似对象的性质描述,同类对象具有相同的性质相同种类的属性以及方法。3、对象与类:所有对象的属性、事件和方法程序在定义类时被指定。(1)、类的类型:基类、子类、用户自定义类、容器类、库类。a、基类(Base Class):是Visual FoxPro预先定义的类。基类都有自己的一套属性、方法、事件。b、子类(Subclass):是指以某个类的定义为基础创建的新类,子类 所基于的类称为父类。子类将继承父类的全部特征,包括对父类所做的任何修改。c、用户自定义类(User-define Class):用户可以从基类派生出子类,即用户自定义类。用户可以为用户自定义类设置属性、编写代码、方法程序,也 可创建新的属性和方法程序。也可添加到表单控件工具栏中。d、容器类(Container Classes)、控件类(Control Classes):类也可分为容器类和控件类。生成的对象也可分为容器对象和控件对象 e、类库(Class Library):类库可用来存储以可视方式设计的类,其文 件扩展名为.VCX。,(2)、类的特征:封装特征:封装是指将对象的方法和代码包装在一起。封装使抽象成为可能,所谓抽象是指能够忽略对象的内部细节,使用户集中精力来使用对象的特性。子类特征:用户可以在VFP所提供的基类的基础上,根据需要定义新的类,即子类。一个子类可以拥有其父类的全部功能,包括属性、方法,在此基础上,可添加其他控件和功能。定义子类是实现代码重用的一条途径。首先找到与自己所需最相似的类,然后对其进行定制,生成子类继承性特征:继承表达了一种从一般到特殊的进化过程。在面向对象的方法里,继承是指在基于现有类的方法和属性,且可以使在一个类上所做的修改自动地地反映到它的所有子类当中。这种自动更新节省了用户的时间和精力。(3)、类的创建:A、“项目管理器”窗口/“类”选项卡“新建”按钮 B、“命令”窗口输入命令:CREATE CLASS(4)、类的编辑:打开类的“属性”对话框设置相关属性(5)、类的添加:A、将类添加到工具栏“表单设计器”工具栏/“查看类”按钮 B、为字段设置相关类“表设计器”/“字段”选项卡(6)、类的删除:A、删除一个类“项目管理器”窗口/“类”选项卡/“移去”按钮 B、删除类库删除.VCX文件,(二)、事件模型,1、事件(Event):事件是由VFP定义的一组动作。它作用于对象,对象识别事件并做出相应的反应。是一种由系统预先定义而由用户或系统发出的动作。事件集是固定的,用户不能创建新的事件。2、编写事件代码的两条基本原则:A、容器对象不处理与所包含的控件对象相关联的事件。B、若没有与某控件相关联的事件代码,则Visual FoxPro在该控件所在类的层次结构中逐层向上检查是否有与此事件相关联的代码。C、以上规则对选项按钮和命令按钮例外。3、VFP基类的最小事件集,不管哪个基类都包含这些事件:,Visual FoxPro事件一般触发顺序,常用的事件和方法,4、可为事件指派代码 事件发生时,若没有与之相关联的代码,则不会发生任何操作。对于绝大多数事件,都不必编写代码,只需对少数几个关键的事件编程即可。一段代码应置于何处,是由事件发生的顺序决定的。注意:A、表单中所有控件的Init事件将在表单的Init事件之前执行,所以在表单显示以前,就需要在表单的Init事件代码中处理表单上的任意一个控件。B、若要在列表框、组合框、复选框的值改变时执行某代码,可将它编写在Interactive Change事件中,而不是Click事件中,因为有时控件的值的改变并不触发Click事件,有时控件的值没有改变,而Click事件却会发生。C、当拖动一控件时,系统将忽略其他鼠标事件。D、Valid和When事件的默认返回值为.T.(真)。若从When事件返回.F.(假)或0,控件将不被激活。若从Valid事件返回.F.(假)或0,则不能将焦点从控件上移走。,二、表单的概念、创建与管理,A、概念:表单:是一个可以处理的对象,它有自己的属性、事件、方法。表单生成的文件:是.SCX表单文件、.SCT表单备注文件。表单属于容器类。在表单上可以添加各种控件对象。B、作用:每一个应用程序至少有一个表单,在应用程序中,可以利用表单来让用户查看和输入数据。作为用户界面的设计工具,通过设置表单的属性,可以使用户界面符合各种不同的要求;通过执行程序代码,使表单能够执行用户界面中所指定的任务。,1、建立表单A、建立表单步骤:a、设置用户表单的属性 b、在表单中添加所需的控件对象 c、设置控件的属性 d、书写表单及控件对象的事件驱动代码B、建立表单方法:a、使用表单向导创建表单 b、使用表单设计器创建、设计新的表单或修改已有的表单,(1)、利用表单“向导”创建表单A、调用表单“向导”的方法:a、“文件”菜单/“新建”命令 b、“工具”菜单/“向导”命令 c、“常用”工具栏/“表单”按钮 d、“项目管理器”窗口/“新建”按钮B、两种表单“向导”:a、“表单向导”:创建基于一个表的表单 b、“一对多表单向导”:创建基于两个具有一对多关系的表的表单注意:向导步骤4当中提供的几种保存方式。,(2)、利用“表单设计器”、“表单生成器”创建表单A、调用“表单设计器”的方法:a、“文件”菜单/“新建”命令对话框中选择“表单”“新建文件”按钮 b、“项目管理器”当中/“文档”选项卡选择“表单”“新建”按钮 c、“命令”窗口输入命令:CREATE FORM d、“命令”窗口输入语句:=createobject(form)modify form B、调用“表单生成器”的方法:a、“表单”菜单/“快速表单”命令或快捷菜单/“生成器”命令 b、“表单设计器”工具栏/“表单生成器”按钮注意:使用“表单生成器”必须在“表单设计器”环境下。,2、保存表单 运行表单之前应该保存表单,否则系统提示。(1)、保存表单.SCX文件、表单备注.SCT文件“文件”菜单/“保存”命令(2)、保存可视类库.VCX文件、可视类库备注.VCT文件“文件”菜单/“另存为类”命令,3、修改表单 修改表单在“表单设计器”环境下进行。(1)、属于某个项目的表单“项目管理器”窗口/“文档”选项卡“修改”按钮(2)、不属于某个项目的表单 A、“文件”菜单/“打开”命令或“常用”工具栏/“打开”按钮 B、“命令”窗口输入:MODIFY FORM,4、运行表单(1)、所谓运行表单:就是根据表单文件及表单备注文件的内容产生 表单对象。(2)、运行表单的方法:A、“项目管理器”窗口/“文档”选项卡“运行”按钮B、“表单设计器”环境“表单”菜单、快捷菜单/“执行表单”命令“常用”工具栏按钮C、“程序”菜单/“运行”命令打开“运行”对话框选择表单运行D、“命令”窗口输入命令:DO FORM NAME WITH,LINKED NOSHOWE、在表单设计器中使用键盘快捷键 CTRL+E注意:表单运行后,可以单击标准工具栏上的“修改表单”按钮,切换 到“表单设计器”环境,使表单进入设计方式。,注意:运行表单命令选项NAME:建立指定名字的变量,指向表单对象,否则建立与表单文件 同名的变量WITH:表单运行引发Init事件时,系统将各实参的值传递给该事件代 码PARAMETERS或LPARAMETERS子句中的各形参LINKED:表单对象随着指向它的变量的清除而关闭,否则不会清除 不管有没有LINKED关键字,指向表单对象的变量并不会 随表单的关闭而清除,此时变量的取值为.NULL.值NOSHOW:是否调用表单对象的Show方法显示表单,5、表单对象的设置(1)、创建表单属性 A、对象的属性(Properties):即对象的特征、性质。B、创建表单属性:a、“表单”菜单/“新建属性”打开“新建属性”对话框“名称”框中输入属性名称“说明”框中输入新建属性的说明信息 b、用类似的方法可以向表单添加数组属性 例如:arrayprop10,2注意:删除属性“表单”菜单/“编辑属性/方法程序”命令 打开相应对话框“移去”按钮,(2)、表单常用属性,(3)、创建方法程序 A、方法程序又称方法(Methods):是指对象所固有完成某种任务 的功能。B、创建方法程序:“表单”菜单/“新建方法程序”命令打开“新建方法程序”对话框“名称”框中输入方法名“说明”框中输入新建方法的说明信息注意:删除方法“表单”菜单/“编辑属性/方法程序”命令 打开相应对话框“移去”按钮,(4)、编辑方法或事件代码“表单设计器”环境,编辑方法或事件代码的步骤:“显示”菜单、快捷菜单/“代码”命令打开代码编辑窗口“对象”框中选择方法或事件所属的对象(表单或表单中的控件)“过程”框中指定需要编辑的方法或事件 在编辑区输入或修改方法或事件的代码,6、常用事件与方法(1)、Init事件:在对象建立时引发。在表单对象的Init事件引发之前,将先引发它所包含的控件对象的Init事件,所以在表单对象的Init事件代码中能够访问它所包含的所有控件对象。(2)、Destroy事件:在对象释放时引发。表单对象的Destroy事件在它所包含的控件对象的Destroy事件引发之前引发,所以在表单对象的Destroy事件代码中能够访问它所包含的所有控件对象。(3)、Error事件:当对象方法或事件代码在运行过程中产生错误时引发。事件引发时,系统会把发生的错误类型和错误发生的位置等参数传递给事件代码,事件代码可以据此对错误进行相应的处理。(4)、Load事件:在表单对象建立之前引发,即运行表单时,先引发表单的Load事件,再引发表单的Init事件。,(5)、Unload事件:在表单对象释放时引发,是表单对象释放时最后一个要引发的事件。比如在关闭包含一个命令按钮的表单时,先引发表单的Destroy事件,然后引发命令按钮的Destroy事件,最后引发表单的Unload事件。(6)、GotFocus事件:当对象获得焦点时引发。对象可能会由于用户的动作(如鼠标单击)或代码中调用SetFocus方法而获得焦点。(7)、Click事件:用鼠标单击对象时引发。引发该事件的常见情况有:A、鼠标单击复选框、命令按钮、组合框和选项按钮。B、在命令按钮、选项按钮或复选框获得焦点时,按空格键。C、当表单中包含一个确认按钮(Default属性值为.T.)时,按Enter键,引发确认按钮的Click事件。D、按控件的访问键。E、单击表单的空白处,引发表单的Click事件。但单击表单的标题栏或窗口边界不会引发Click事件。,(8)、DblClick事件:用鼠标双击对象时引发。(9)、RightClick事件:用鼠标右键单击对象时引发。(10)、InteractiveChange事件:当通过鼠标或键盘交互式改变一个控件的值时引发。(11)、Release方法:将表单从内存中释放(清除)。比如表单有一个命令按钮,如果希望单击该命令按钮时关闭表单,就可以将该命令按钮的Click事件代码设置为ThisForm.Release。(12)、Refresh方法:重新绘制表单或控件,并刷新它的所有值。当表单被刷新时,表单上的所有控件也都被刷新。当页框被刷新时,只有活动页被刷新。(13)、Show方法:显示表单。该方法将表单的Visible属性设置为.T.,并使表单成为活动对象。,(14)、Hide方法:隐藏菜单。该方法将表单的Visible属性设置为.F.。(15)、SetFocus方法:让控件获得焦点,使其成为活动对象。如果一个控件的Enabled属性值或Visible属性值为.F.,将不能获得焦点。,三、表单设计器的基本操作,A、“表单设计器”可以处理下列内容:a、表单中不同类型的对象 b、与表单相关联的数据 c、顶层表单或子菜单 d、能一起操作的多个表单 e、基于自定义模板的表单B、“表单设计器”启动:Visual FoxPro主窗口上出现“表单设计器”窗口、“属性”窗口、“表单控件”工具栏、“表单设计器”工具栏、“表单”菜单。,1、表单设计器环境(1)、“表单设计器”窗口:“表单设计器”窗口内含正在设计的表单的表单窗口。用户可以在表单窗口上可视化地添加和修改控件。表单窗口只能在“表单设计器”窗口内移动。(2)、“属性”窗口:A、“属性”窗口包括对象框、属性设置框和属性、方法、事件列表框。B、“属性”窗口可以通过单击“表单设计器”工具栏中“属性窗口”按钮或选择“显示”菜单中的“属性”命令打开和关闭。(3)、“表单控件”工具栏:A、包含向表单添加控件的控件按钮。B、包含“选定对象”、“按钮锁定”、“生成器锁定”、“查看类”等4个辅助按钮。,(4)、“表单设计器”工具栏:A、“表单设计器”工具栏包含“设置Tab键次序”、“数据环境”、“属性窗口”、“代码窗口”、“表单控件工具栏”、“调色板工具栏”、“布局工具栏”、“表单生成器”、“自动格式”等按钮。B、“表单设计器”工具栏可以通过“显示”菜单中的“工具栏”命令打开和关闭。(5)、“表单”菜单:“表单”菜单中的命令主要用于创建、编辑表单或表单集。,2、控件的操作与布局(1)、控件的操作 A、选定控件 B、移动控件 C、调整控件大小 D、复制控件 E、删除控件(2)、控件的布局 A、控件的布局利用“布局”工具栏完成布局。B、“布局”工具栏通过“表单设计器”工具栏的“布局工具栏”按钮或选择“显示”菜单“布局工具栏”命令打开或关闭。,3、设置Tab键次序 Visual FoxPro提供两种设置Tab键次序方式:交互方式、列表方式 A、选择设置方式:“工具”菜单/“选项”命令/“表单”选项卡/“Tab键次序”下拉列表框 B、设置Tab键次序:a、交互方式:“显示”菜单/“Tab键次序”命令或“表单设计器”工具栏/“设置Tab 键次序”按钮打开Tab键次序盒 先双击,再单击空白处单击,确认设置;Esc放弃设置 b、列表方式:“显示”菜单/“Tab键次序”命令或“表单设计器”工具栏/“设置Tab 键次序”按钮打开Tab键次序对话框 拖动左侧移动按钮移动按钮或“按行”、“按列”按钮确认,4、数据环境的设置(1)、数据环境:是一个对象,有自己的属性、方法、事件。包含与表单有联系的表和视图以及表之间的关系。(2)、常用属性:AutoOpenTables:当运行或打开表单时,是否打开数据环境中的表和视图。默认值为.T.。AutoCloseTables:当释放或关闭表单时,是否关闭由数据环境指定的表和视图。默认值为.T.。(3)、打开数据环境设计器:“表单设计器”环境“表单设计器”工具栏/“数据环境”按钮“显示”菜单/“数据环境”命令 注意:系统菜单栏上出现“数据环境”菜单(4)、向数据环境添加表或视图“数据环境”菜单/“添加”命令或“数据环境设计器”窗口快捷菜单/“添加”命令打开“添加表或视图”对话框选择添加,(5)、从数据环境移去表或视图“数据环境设计器”窗口选择移去的表或视图“数据环境”菜单/“移去”命令或快捷菜单/“移去”命令(6)、在数据环境中设置关系 添加,鼠标拖动 删除,Del键(7)、在数据环境中编辑关系 RelationalExpr:指定基于主表的关联表达式 ParentAlias:指明主表的别名 ChildAlias:指明子表的别名 ChildOrder:指定与关联表达式相匹配的索引 OneToMany:指明关系是否为一对多关系(8)、向表单添加字段 A、允许从“数据环境设计器”窗口、“项目管理器”窗口、“数据库设计器”窗口中直接将字段、表、视图拖入表单,产生相应的控件并与字段相联系。B、“工具”菜单/“选项”命令/“字段映象”选项卡修改映象关系。,四、常用表单控件的基本操作,1、标签(Lable)控件:创建一个标签控件,用于放置不希望用户改动的文本。也称“标题文本”,最多256字符。可以设置访问键“字母”。2、命令按钮(CommandButton)控件:创建一个命令按钮控件,用于执行命令。3、命令按钮组(CommandGroup)控件:创建一个命令按钮组控件,用于把相关的命令编成组。4、文本框(TextBox)控件:创建一个文本框控件,用于放置单行文本,可以在其中输入或者更 改文本。5、编辑框(EditBox)控件:创建一个编辑框控件,用于放置多行文本,可以在其中输入或者更 改文本。6、复选框(CheckBox)控件:创建一个复选框控件,用于允许用户选择开关状态,或者显示多个 选项,可以从中选取多项。,7、选项按钮组(OptionGroup)控件:创建一个选项按钮组控件,用于显示多个选项,只能从其中选择 一项。8、列表框(ListBox)控件:创建一个列表控件,用于显示供用户选择的列表项。9、组合框(ComboBox)控件:创建一个组合框控件,用于创建一个下拉式组合框或下拉式列表框,可以从列表框中选择一项或者人工输入一个值。10、表格(Grid)控件:创建一个表格控件,用于在电子表格式的网格中显示数据。11、页框(PageFrame)控件:创建一个页框控件,用于显示控件的多个控件。12、微调(Spinner)控件:创建一个微调控件,用于接受给定范围之内的数据输入。,13、图象(Image)控件:创建一个图象控件,用于在表单上显示图象。14、计时器(Timer)控件:创建一个计时器控件,用于在指定时间或按指定间隔运行程序。计时器控件在运行时不可见。15、ActiveX控件(OleControl)控件:创建一个ActiveX控件,用于面向应用程序中添加OLE对象。16、ActiveX绑定控件(OleBoundControl)控件:创建一个ActiveX绑定控件用于向应用程序中添加OLE对象,与 ActiveX控件不同的是,ActiveX控件绑定到一个通用字段上。17、线条(Line)控件:创建一个线条控件,用于设计时在表单上画各种类型的线条。18、形状(Shape)控件:创建一个形状控件,用于设计时在表单上画各种类型的形状,可 以画矩形、圆角矩形、正方形、圆角正方形、圆、椭圆。,19、容器(Container)控件:创建一个容器控件,用于将容器控件置于当前表单上。20、分隔符(Seprater)控件:创建一个分隔符控件,用于在工具栏的空间之间加上空格。21、超级链接(Hyperlink)控件:创建一个超级链接控件,用于连接其他资源。,