封面表单是数据库应用系统的主要工作界面。它提供给用户一个友好的操作界面,用于数据的输入、修改、浏览和查询,以及系统流程的控制。表单的设计是进行面向对象可视化编程的基础表单设计7.1面向对象基本概念面向对象程序设计(Objec-OrientedProgramming)是一种新的程序设计方法,是当前程序设计的主流方向。面向对象程序设计,侧重考虑如何将一个复杂的应用程序分解成简单的对象,然后创建对象,定义每个对象的属性和行为。面向对象基本概念客观世界里的任何实体都可以被看作是对象。例如,一本图书、一名学生、一辆汽车、一部手机等,都可以将其作为一个对象。在VFP中,如图7.1所示,表单上的容器、组合框、标签、文本框、命令按钮等都是对象。甚至表单本身也是一个对象。它们具有自己的状态和行为。对象的状态用数据来表示,称为属性。对象的行为用代码来实现,称为对象的方法。在面向对象的程序设计中,对象被定义为由属性和相关方法组成的包。7.1.1对象对象每个对象都有自己的属性,属性是用来表示它的外观和描述它的特征。例如,一部手机是一个对象,手机的颜色是白色的、滑盖式样、重量100克、有摄像头……就是它的属性。在VFP中,表单的宽度是420象素,高度是300象素,标题是系统登录,背景色为灰色,就是此表单的属性。一般来说,VFP中对象的大部分属性都采用系统设置的默认值,只有部分属性需要用户设置。对象的属性所谓事件,是由VFP预先定义好的,能够被对象识别的、用户或系统触发的一个特定动作。事件可以由系统触发,例如,当生成对象时,系统就引发一个Init事件,对象识别该事件并执行相应的Init事件代码。事件也可以由用户触发,例如,当用户用鼠标单击命令按钮,命令按钮识别该事件,并执行相应的Click事件代码。对象的事件用户可以为对象的事件编写相应的过程。该事件一旦被触发,系统就马上执行与该事件对应的过程。待事件过程执行完毕,系统又处于等待某事件发生的状态,这就是面向对象编程的事件驱动工作方式。如果用户没有为触发的事件编写程序,则事件发生时系统不会发生任何操作。除了由用户或系统触发,也可以在程序中编写代码来触发对象的事件。对象的事件方法是附属于对象的行为和动作,是与对象相关联的过程,是对象能够执行的操作。例如,手机的拨打、接听、照相、发短信等操作,就是系统为手机对象设定的方法。在VFP中,方法程序是VFP为对象内定的通用过程,能使对象执行一个操作。例如,表单的Release方法就是从内存中释放表单,Refresh方法就是重画表单,刷新所有的值。对象的方法方法过程代码由VFP预先定义,对用户是不可见的,但用户可以在代码窗口修改方法过程。当用户在代码编辑窗口写入代码,相当于为该方法程序增加了功能,而VFP为该方法程序定义的原有功能并不清除。对象的方法编写程序实现以下功能:数据库中用户表如图7.2所示,该数据表有用户名和密码两个字段,记录了使用该系统的用户信息。在如图7.1所示的系统登录表单中,当用户单击“登录”按钮时,系统检查用户在组合框选择的用户名和文本框输入的密码是否正确。若密码正确,则执行表单“主界面”;若密码错误,则提示用户密码错误,并将文本框的文本清除,将光标定位到此文本框。已知,此表单中,表单的名称为Form1,容器的名称为Container1,用户名的组合框的名称为Combo1,输入密码的文本框的名称为Text1。例题:属性、事件、方法实例IF密码=ALLT(THISFORM.Container1.Text1.VALUE)&&判断文本框输入的密码与数据表中的密码是否相同Thisform.RELEASE&&若找到符合条件的记录,调用表单的Release方法,释放此表单DOFORM主界面&&运行主界面表单ELSEMESSAGEBOX('密码错误',0+16+0)&&否则,打开对话框显示提示信息Thisform.Container1.Text1.VALUE=''&&将Text1文本框的值的属性设为空字符,即清除文本框中输入的密码Thisform.Container1.Text1.SETFOCUS&&调用Text1文本框的Setfocus方法,将光标定位到此控件ENDIF例题:属性、事件、方法实例类是具有相同种类的属性和方法的对象的抽象。类和对象关系密切,但并不相同。类是用来创建对象的模板,而对象是类的实例。VisualFoxPro提供了一系列基本对象类,简称基类。用户可以在基类的基础上创建各种所需的对象,还可以在基类的基础上创建自己的子类。VisualFoxPro的基类分成两大类:容器类和控件类。7.1.2VFP基类简介控件通常存在一个容器内,是一个图形化的、能与用户进行交互的对象。控件类类名中文名称类名中文名称CheckBox复选框Listbox列表框ComboBox组合框OLEBoundOLE绑定控件CommandButton命令按钮OLEContainerOLE容器控件OptionButton选项按钮Shape形状Label标签Spinner微调控件EditBox编辑框TextBox文本框Image图像Timer定时器Line线条HyperLink超级链接容器类对象是可以容纳其他对象的对象,用户可以单独地访问或处理容器中包含的任一个对象。容器类容器类中文名称能直接包含的对象Container容器可包含任意控件及页框、表格等容器FormSet表单集可包含表单、工具栏Form表单除表单集外的所有对象Grid表格可包含多个表格列Column表格列可包含表格头及文本框、组合框等控件PageFrame页框可包含多个页面Page页面可包含任意控件及表格、命令按钮组等容器CommandGroup命令按钮组命令按钮Optiongroup选项按钮组选项按钮组ToolBar工具栏可包含任意控件及页框等容器在面向对象的程序设计中,对某个对象的操作是通过对该对象的引用来实现的。访问对象的属性采用对象引用.属性的形式,调用对象的方法采用对象引用.方法的形式。7.1.3对象的引用对象的引用有两种方式:绝对引用和相对引用。绝对引用是从外层的容器对象开始逐层向下直到某个对象为止。例如,在例7.1中,绝对引用文本框Text1的方式为:Form1.Contianer1.Text1。相对引用是从正在为编写事件代码的对象出发,通过逐层向高一层或低一层直到要引用的对象。对象的引用参照关键字说明Parent当前对象的父对象This当前对象ThisForm当前对象所在的表单ThisFormSet当前对象所在的表单集例如,在表单中相对引用文本框Text1的方式为This.Contianer1.Text1,在容器中相对引用文本框Text1的方式为This.Text1。在命令按钮中相对引用文本框Text1的方式为This.Parent.Text1。当然,表单中的任何对象要相对引用文本框Text1,都可使用Thisform.Contianer1.Text1。对象的引用7.2表单的建立与运行在VFP中,创建表单通常有两种途径:使用表单向导或使用表单设计器创建表单。不管使用哪种方法建立表单,在磁盘上会产生一个扩展名为SCX的表单文件和一个扩展名为SCT的表单备注文件。表单的建立与运行表单向导是以简单的方式,引导用户快捷地建立表单。用户只需要依次回答对话框中一系列简单的问题,就可以自动地创建一个表单。表单中包含一些控件显示数据表中的数据,还提供按钮以实现对数据的浏览、查找、添加、编辑和删除等操作。使用表单向导创建表单在TSGL项目中使用表单向导创建一个能维护读者表的表单。例题通过菜单修改表单修改表单通过项目管理器修改表单命令修改表单MODIFYFORM[表单文件名]启动表单设计器后运行表单运行表单通过项目管理器运行表单通过菜单运行表单DOFORM表单文件名[WITH参数1[,参数2]]如果有WITH短语,则在运行表单时,系统会将各实参的值传递给表单的Init事件代码中用Parameters所定义的形式参数。表单运行时,可以通过单击“常用”工具栏的“修改表单”按钮,切换到表单设计器窗口来修改表单。通过命令运行表单7.3表单设计器启动表单设计器在表单的数据环境添加需要的数据表或视图向表单中添加其所需的控件为表单及其控件设置属性在表单和控件的相关事件中,编写相应的程序代码。建立表单的步骤启动表单设计器通过项目管理器建立表单通过菜单建立表单通过命令建立建立表单CREATEFORM[表单文件名]启动表单设计器表单控件工具栏属性窗口表单设计器窗口表单设计器工具栏设置数据环境每一个表单都可以设置自己的数据环境。数据环境中包含表单所需要的一些数据表或视图以及表之间的关联。通常情况下,数据环境中的数据表或视图会随着表单的运行而打开,并随着表单的释放而关闭。设置数据环境后,用户还可以直观地设置表单控件中与数据相关的属性。在表单设计器上按鼠标右键,选择数据环境命令单击表单设计器工具栏上的数据环境按钮显示数据环境设置数据环境在数据环境中添加表或视图从数据环境中移去表或视图在数据环境中设置表的关联设置数据环境在TSGL项目中建立一个表单,在此表单的数据环境中添加“用户”数据表。例题向表单中添加控件在表单控件工具栏中单击需要的控件按钮,将鼠标指针移动到表单上,然后单击表单放置控件或把控件拖至所需大小即可向表单中添加控件在例7.3所建立的表单中,建立一个容器对象。在容器对象中建立两个标签,一个文本框,一个组合框和两个命令按钮。例题选定控件选定一个控件选定多个控件取消控件的选定调整控件大小移动控件删除控件复制控件控件的基本操作控件的布局控件的TAB键次序所谓Tab键次序,就是运行表单时按Tab键时光标经过表单中控件的顺序。表单控件的默认Tab键次序是控件添加到表单时的次序。单击“表单控件”工具栏的“设置Tab键次序”按钮;或选择“显示”菜单的“Tab键次序”命令鼠标指向在表单运行时应第一个具有焦点的控件,双击此控件,则此控件的Tab键顺序被设置为1。按运行时所要求的Tab键次序,依次单击其他控件。单击控件外的任何地方,完成设置。为表单和控件设置属性在设计表单时,当用户要设置表单或控件的属性,应在属性窗口进行。在表单设计器上按鼠标右键,选择属性命令单击表单设计器工具栏上的属性按钮显示属性设置属性设置属性在例7.4所建立的表单中,将表单的标题设为“系统登录”,宽度设为420,高度设为300。将标签1的标题设为“用户”,标签2标题设为“密码”,命令按钮1标题设为“登录”,命令按钮2标题设为“退出”。将四个控件的字号设为12,加粗,自动大小。将组合框的源数据设为来源于用户数据表的用户名字段,文本框的显示字符设为“*”。例题常用的表单属性属性说明默认值AlwaysOnTop当属性值设为.T.,该表单运行时总是在最顶层显示,不会被其他窗口覆盖。.F.AutoCenter设置表单初始化时是否自动在VisualFoxPro主窗口中居中显示。.F.BackColor采用RGB三原色设置表单的背景颜色。255,255,255BorderStyle设置表单边框的风格,设为0表示无边框,1表示单线边框,2表示采用固定对话框边框,3表示可调边框。3Caption设置表单标题栏上的文本。Form1Closable设置是否可以通过单击标题栏的关闭按钮来关闭表单。.T.DataSession设为1表示表单里的表在全局访问的工作区打开,2表示在表单自己的私有工作区打开。1常用的表单属性属性说明默认值MaxButton设置表单是否具有最大化按钮。.T.MinButton设置表单是否具有最小化按钮。.T.Movable设置表单是否能移动。.T.Scrollbars设置表单的滚动条类型,设为0表示无滚动条,1表示有水平滚动条,2表示有垂直滚动条,设为3表示既有水平又有垂直滚动条。0ControlBox设置表单的左上角是否显示控制菜单图标。.T.WindowType设置是否为模式表单。设为0表示模式表单,即在运行应用程序时,用户必须先