表单设计与应用.doc
表单设计与应用 一、【教学目标】理解面向对象的概念了解foxpro的基类、容器与控件和事件的基本内容理解并掌握创建与管理表单的方法理解并掌握表单设计器的使用方法理解并掌握常用表单控件的使用方法二、【教学内容】面向对象程序设计的基本概念foxpro的基类、容器与控件和事件创建与管理表单的方法表单设计器的使用方法常用表单控件的使用方法三、【重点和难点】重点:类、对象、属性、事件和方法的概念表单的创建与管理表单方法各种控件的创建与编程方法难点:类、对象、属性、事件和方法的概念表单的创建与管理表单方法各种控件的创建与编程方法四、【教学要点】8.1 面向对象的概念8.1.1 对象与类1.对象 客观世界里的任何实体都可以被看作是对象,对象可以是具体的物,也可以指某些概念,每个对象都有自己的行为。 使用面向对象的方法解决问题的首要任务就是要从客观世界里识别出相应的对象,并抽象出为解决问题所需要的对象属性和对象方法。属性用来表示对象的状态,方法 用来描述对象的行为。在面向对象的方法里,对象被定义为由属性和相关方法组成的包。方法是描述对象行为的过程,是对当某个对象接受了某个消息后多采用的一系列操作的描述。2.类 类是一类对象关系的性质描述。这些对象具有相同种类的属性及方法。类好比是一类对象的模板,有了类定义后,基于类就可以生成这类对象中的任何一个对象,这些对象虽然采用相同的属性来表示状态,但它们在属性上的取值完全可以不同。在类的定义中,可以为某个属性指定一个值,作为它的默认值。 通常,我们把基于某个类生成的对象称为这个类的实例。注意:方法尽管定义在类中,但执行方法的主体是对象。8.1.2 子类与继承 继承是指基于现有的类创建新类时,新类继承了现有类里的方法和属性。 一个子类的成员一般包括: 由其父类继承的成员,包括属性和方法。 由子类自己定义的成员,包括属性和方法。继承可以使在一个父类所作的改动反映到它的所有子类上。 8.2 Visual Foxpro基类简介8.2.1 Visual Foxpro基类 Visual FoxPro基类是系统内含的、并不存放在某个类库中。用户可以基于基类生成所需要的对象,也可以扩展基类创建自己的类。下表是Visual FoxPro基类的清单。类名 含义类名 含义ActiveDoc活动文档Lable标签CheckBox复选框Line线条Column表格列Listbox列表框ComboBox组合框OleControlOLE容器控件CommandButton命令按钮OleBoundControl绑定控件CommandGroup命令按钮组OptionButton选项按钮Container容器OptionGroup选项按钮组Control控件Page页Custom定制PageFrame页框EditBox编辑框ProjectHook项目挂钩Form表单Separator分隔符Formset表单集Shape形状Grid表格Spinner微调控件Header(列)标头Textbox文本框HyperLink超级链接Timer定时器Image图像Toolbar工具栏 每个Visual FoxPro基类都有自己的一套属性、方法和事件。当扩展某个基类创建用户自定义类时,该基类就是用户自定义类的父类,用户自定义类继承该基类中的属性、方法和事件。下表列出了Visual Foxpro基类的最小属性集。属性说明 class类名,当前对象基于哪个类生成BaseClass基类名,当前类从哪个Visual FoxPro基类派生而来ClassLibrary类库名,当前类放在哪个类库中ParentClass父类名,当前类从哪个类直接派生而来 在编程方式里,对象的生成通常使用createobject函数来完成。该函数的格式如下: CREATEOBJECT(<类名>,<参数1 >,<参数2>,.)函数基于指定的类生成一个对象,并返回对象的引用。通常,可以把函数返回的对象引用赋给某个变量,然后,通过这个变量来标识对象、访问对象属性以及调用对象方法。对象属性访问以及对象方法调用的基本格式如下:<对象引用>.<对象属性><对象引用>.<对象方法>(.)8.2.2 容器与控件VisualFoxPro中的类可分为两中类型:容器类和控件类。相应地,可分别生成容器(对象)和(控件)对象。控件是一个可以以图形化的方式显示出来并能与用户进行交互的对象,控件通常被放在一个容器里。容器可以被认为是一种特殊的控件,它能包含其他的控件或容器,这里把对象称为那些被包容对象的父对象。下表列出了常用的容器及其所能包容的对象。容器能包容的对象表单集表单、工具栏表单任意控件以及页框、container对象、命令按钮组、选项按钮组、表格等对象表格列列标头和除表单集、表单、工具栏、定时器及其他列之外的任意对象页框页页任意控件及Container对象、命令按钮组、选项按钮组、表格等对象命令按钮组命令按钮选项按钮组选项按钮Container对象任意控件以及页框、命令按钮组、选项按钮组、表格等对象 在对象的嵌套层次关系中,要引用其中的某个对象,也需要指明对象在嵌套层次中的位置。这是经常用到如下表所列的几个属性或关键字。 属性或关键字引用parent当前对象的直接容器对象This当前对象ThisForm当前对象所在表单ThisFormSet当前对象所在的表单集这里parent是对象的一个属性,属性值为对象引用,后面三个是关键字,只能用在方法代码和事件代码中。8.2.3 事件事件是由系统预先定义而由用户或系统发出的动作。事件作用于对象,对象识别事件并作出相应的反应。事件可以由系统引发,也可以由用户引发。与方法集可以无限扩展不同,事件集是固定的。用户不能定义新的事件。下表列出了Visual Foxpro基类的最小事件集。事件说明Init当对象生成时引发Destroy当对象从内存中释放时引发Error当方法或事件代码出现运行错误时引发事件代码既能在事件引发时执行,也可以像方法一样被显式调用。比如,在产生一个表单对象oForm时,系统会自动执行init事件代码,但用户也可以在随后用下面的命令显示调用该表单对象的init事件代码: oForm.Init每个对象识别并处理属于自己的事件。但这个原则不适合于命令按钮组和选项按钮组。在命令按钮组或选项按钮组中,如果为按钮组编写了某事件代码,而组中某个按钮没有与该事件相关联的代码,那么当这个按钮的事件引发时,将执行组事件代码。 8.3 创建和管理表单8.3.1 创建表单(表单文件.scx,表单备注文件.sct)1. 使用表单向导创建表单(表单向导,一对多表单向导)法1:项目管理器/文档/表单/新建/表单向导法2:工具/向导/表单/表单向导(向导不能创建基于视图的表单)采用上面任意一种方法后,系统将打开“表单生成器”对话框。利用向导创建单表的表单 字段选取 样式与按钮类型 排序次序 完成如果是通过项目管理器启动的向导,则创建的表单将自动地包含在项目中,否则可以在项目管理器中利用表单的“添加”操作将表单添加到项目中 利用向导创建一对多表单 选择子表 从子表中选定字段 确定表之间的关系(如果两个表为数据库表且具有永久性关系,在向导中系统不会自动地作为默认的关系) 选择表单的样式与按钮类型 确定排序次序 输入表单标题后,可以选择“预览”以运行表单、查看表单 完成 2. 使用表单设计器创建表单 项目管理器/“文档”选项卡/“表单”/“新建”/“新表单”按钮常用工具栏的“新建”按钮/“表单”/“新建文件”“文件”/“新建”/“表单”/“新建文件”命令窗口中执行 CREATE FORM <文件名>执行以上命令就会打开“表单生成器”对话框,如图所示在表单设计器环境下,也可以调用表单生成器快速地产生表单,调用方法有三种: “表单”/“快速表单”。“表单设计器”工具栏中的“表单生成器”按钮。右键单击表单窗口,在弹出的快捷菜单中选择“生成器”命令。执行以上命令就会打开表单生成器对话框,如图所示。 3. 修改表单 MODIFY FORM <文件名>“项目管理器”/“文档”/表单左边的加号/需要修改的表单文件/单击修改按钮。 4. 运行表单 “项目管理器”/选择表单/运行。在表单设计器环境下,“表单”/“执行表单”或"运行"按钮。 DO FORM 命令do form <表单文件名NAME<变量名>WITH <实参>,<实参2>,.LINKEDNOSHOW如果在“命令”窗口发出DO FORM命令,表单对象就和一个公共变量相关联,可以通过这个变量名来访问表单对象。例如,在“命令”窗口发出下面的命令,打开一个名为Student的表单并改变它的标题。DO FORM StudentStudent.Caption="学生情况登记"如果包含NAME子句,系统将建立指定名字的变量,并使它指向表单对象;否则系统建立与表单文件同名的变量指向表单对象。如果包含WITH子句,那么在表单运行引发init事件时,系统会将各实参的值传递给该事件代码PARAMETERS或LPARAMTERS子句中的各形参。DO FORM命令中的LINKED关键字允许将表单和表单对象变量链接起来,如果包含了LINKED关键字,当与表单对象相关联的变量超出范围时,表单将被释放。例如,下面命令创建一个链接到对象变量mystud2的表单:DO FORM Student NAME mystud2 LINKED当释放mystud2时, 表单也关闭。一般情况下,运行表单时,在产生表单对象后,将调用表单对象的show方法显示表单,如果包含noshow关键字,表单运行时将不显示,直至表单对象的visible属性设置为.T.或者调用了show方法。8.3.2 管理表单属性和方法1. 常用的表单属性2. 创建新属性“表单”/“新建属性”,打开如图所示的对话框“名称”框中输入属性名称。“说明”框中输入新建属性的说明信息3. 创建新方法“表单”/“新建方法程序”,打开如图所示的对话框“名称”框中输入方法名。“说明”框中输入新建方法的说明信息。4. 编辑方法或事件代码 “显示”/“代码”打开编辑窗口。“对象”框中选择方法或事件所属的对象。“过程”框中指定要编辑的 方法或事件。 编辑区修改方法或事件的代码。打开代码窗口的方法: 双击表单中的某个控件。在属性窗口的列表框中双击某个方法或事件。8.3.3 常用事件与方法。8.4 表单设计器8.4.1 表单设计器环境1. 表单设计器窗口2. 属性窗口属性窗口如图所示 表单及其控件均称为“对象”,每个对象均有其属性、事件和方法,不同类型的对象有不同的属性、事件和方法,可以在“属性”窗口中查看、修改或设置该对象的属性、事件和方法,控件的属性、事件及方法的设置可在“属性”窗口中进行,“属性”窗口包含选定的表单、数据环境或控件的属性、事件和方法列表,可在设计或编程时对这些属性值进行设置或更改。窗口中的各个选项卡上的内容,由于不同类型的对象可能有不同的属性、事件和方法,所以选项会根据选定的对象的不同而变化。 对于表单中绝大多数属性,其数据类型通常是固定的,也有些属性的数据类型并不是固定的。 一般来说,要为属性设置一个字符型值,可以在设置框中直接输入,不需要加定界符,否则系统会把定界符作为字符串的一部分,但对既可接收数值型数据又可接受字符型数据的属性来说,如果直接输入数字123,系统会把它作为数值型数据对待。要为这类属性设置数字格式的字符串,可采用表达式的方式,如="123"。 要通过表达式为属性赋值,可以再设置框中先输入等号再输入表达式,或者单击设置框左侧的函数按钮打开表达式生成器,用它来给属性指定一个表达式。表达式在运行初始化对象时计算。 有些属性的设置需要从系统提供的彝组属性值中指定,此时可以单击设置框右侧的下拉箭头打开列表框从中选择,或者在属性列表框中双击属性,即可在各属性值之间进行切换。 要把一个属性设置为默认值,可以在属性列表框中右键单击该属性,然后在快捷菜单中选择“重置为默认值”。要把一个属性设置为空串,可以选定该属性后,依次按BackSpace键和Enter键,此时在属性列表框中该属性的属性值显示为(无)。 有些属性在设计时是只读的,用户不能修改。这些属性的默认值在列表框中以斜体显示。 也可以同时选择多对象,这时属性窗口中显示这些对象的共有的属性,用户对属性的设置也将针对所有被选定的对象。 “属性”窗口可以通过单击“表单设计器”工具栏中“属性窗口”按钮或选择“显示”菜单中的“属性”命令打开或关闭。3. 表单控件工具栏 选定对象按钮:当按钮处于按下状态时,表示不可创建控件,此时可以对已创建的控件进行编辑;当按钮处于未按下状态时,表示允许创建控件。查看类按钮:在可视化设计表单时,除了可以使用基类,还可以使用保存在类库中的用户自定义的类,但应先将它们添加到“表单控件”工具栏中。方法是单击工具栏上的“查看类”按钮,然后在弹出的菜单中选择“添加”命令,调出“打开”对话框,选定所需的类库文件,单击“确定”按钮。要使“表单控件”工具栏重新显示基类,可选择“查看类”按钮弹出的菜单中的“常用”命令。标签(只读)文本框(单行,可输入)编辑框(多行,可输入)命令按钮命令组选项组复选框组合框(选择,输入)列表框(选择按钮锁定按钮:当按钮处于按下状态时,可以从“表单控件“工具栏中单击选定某种控件按钮,然后在表单窗口中连续添加这种控件。生成器所定按钮:当按钮处于按下状态时,每次往表单添加控件,系统都会自动打开相应的生成器对话框。4. 表单设计器工具栏 ,这几个按钮依次为:设置 Tab 键次序数据环境属性窗口代码窗口表单控件工具栏调色板工具栏布局工具栏表单生成器自动格式 5. 表单菜单表单菜单中的命令主要用于创建、编辑表单或表单集。 (7)表单设计的环境设计若要查看和更改环境设置,可以从“工具”菜单中选择“选项”命令 。 “选项”对话框有十个选项卡,选择“表单”选项卡可以为新表单修改表单设计器选项的默认值(已有的表单使用存储在资源文件中的设置)。这些选项应用于在当前数据工作期中设计的任何表单或表单集上 。8.4.2 控件的操作与布局1. 控件的基本操作选定控件选定单个控件:单击控件;同时选定相邻的多个控件:拖动鼠标使出现的框围住所选的控件;同时选定不相邻的多个控件:按住shift键的同时,依次单击各控件。 移动控件选定控件,然后用鼠标拖动既可。如果拖动时按住了ctrl键,可以使鼠标移动的步长减小。使用方向键也可以移动控件。 调整控件大小先选定然后拖动四周的控点 复制控件县选定控件,接着选择“编辑菜单中的“复制”命令,然后选择“编辑”菜单中的“粘贴”命令,最后将复制产生的新控件拖动到新的位置。 删除控件选定不需要的控件,按delete键或选择“编辑”菜单中的“剪切”命令。 2. 控件布局 按钮功能左边对齐让选定的所有控件沿其中最左边的那个控件的左侧对齐右边对齐让选定的所有控件沿其中最左边的那个控件的右侧对齐顶边对齐让选定的所有控件沿其中最左边的那个控件的顶边对齐底边对齐让选定的所有控件沿其中最左边的那个控件的底边对齐垂直居中对齐使所有被选控件的中心处在一条垂直轴上水平居中对齐使所有被选控件的中心处在一条水平轴上相同宽度调整所有被选控件的宽度,使其与其中最宽控件的宽度相同相同高度调整所有被选控件的高度,使其与其中最高控件的高度相同相同大小使所有被选控件具有相同大小水平居中使被选控件在表单内水平居中垂直居中使被选控件在表单内垂直居中置前将被选控件移至最前面,可能会把其他控件覆盖住置后将被选控件移至最后面,可能会把其他控件覆盖住 3. 设置tab键次序工具/选项,打开“选项”对话框。 选择“表单”选项卡。 在“tab键次序”下拉列表框中选择“交互”或“按列表” 在交互方式下,设置tab键次序的步骤如下:显示/Tab键次序或单击“表单设计器”工具栏上的“设置Tab键次序”按钮,进入tab键次序设置状态。此时控件左上方出现深色小方块,称为Tab键次序盒,显示该控件的Tab键次序号码。 如图所示。双击某个控件的tab键次序盒,该控件将成为Tab键次序中的第一个控件。 按希望的顺序依次单击其它控件的tab键次序盒。 单击表单空白处,确认设置并退出设置状态;按esc键,放弃设置。 在列表方式下,设置tab键次序的步骤如下:显示/Tab键次序或单击“表单设计器”工具栏上的“设置Tab键次序”按钮,打开“tab键次序”对话框。列表框中按tab键次序显示各控件。如图所示。通过拖动控件左侧的移动按钮移动控件,改变控件的tab键次序。 单击“按行”按钮,将各控件在表单上的位置从左到右、从上到下自动设置各控件的tab键次序;单击按列按钮,将各控件在表单上的位置从上到下、从左到右自动设置各控件的tab键次序。 8.4.3 数据环境1. 数据环境的常用属性属性名含义默认值AutoOpenTables当运行或打开表单时,是否打开数据环境中的表和视图.T.AutoCloseTables当释放和关闭表单时,是否关闭有数据环境指定的表和视图.T.2. 打开数据环境设计器在表单设计器环境下,单击“表单设计器”工具栏上的“数据环境”按钮或选择“显示”菜单中的“数据环境”命令,即可打开数据环境设计器。3. 向数据环境添加表或视图在数据环境设计器环境下,按下列方法向数据环境添加表或视图:选择“数据环境”菜单中的 “添加”命令,或右键单击“数据环境设计器”窗口,然后在快捷菜单中选择“添加”命令,打开“添加表或视图”对话框。如果数据库原来是空的,那么在打开数据环境设计器时,该对话框会自动实现。选择要添加的表或视图并单击“添加”按钮。如果单击“其他”按钮,将调出“打开”对话框,用户可以从中选择需要的表。如果数据库原来是空的且没有打开的数据库,那么在打开数据环境设计器时,该对话框会自动实现。 4. 从数据环境移去表或视图在“数据环境设计器”窗口中,单击选择要移去的表或视图。 选择“数据环境”菜单中的“移去”命令。当表从数据环境中移去时,与这个表有关的所有的关系也将随之消失。 5. 在数据环境中设置关系如果添加到数据环境的表之间具有在数据库中设置的永久关系,这些关系也会自动添加到数据环境中。如果表之间没有永久关系,可以根据需要在数据环境设计器下为这些表设置关系。 设置关系的方法:将主表的某个字段拖动到子表的相匹配的索引标记上即可。如果子表上没有与主表字段相匹配的索引,也可以将主表字段拖动到子表的某个字段上,这时应根据系统提示创建索引。 要解除表之间的关系,可以先单击选定表示关系的连线,然后按del键。6. 在数据环境中编辑关系 先单击表示关系的连线选定关系,然后在“属性”窗口中选择关系属性并设置。常用的关系属性如下表所示。属性名含义RelationalExpr用于指定基于主表的关联表达式ParentAlias用于指定主表的别名ChildAlias用于指定子表的别名ChildOrder用于指定与关联表达式相匹配的索引OneToMany用于指明关系是否为一对多关系7. 向表单添加字段很多情况下,通过控件来显示和修改数据,比如,用一个文本框来显示或编辑一个字段数据,这时,就要为该文本框设置ControlSource属性。 Visual Foxpro 提供了更好的方法,允许用户从“数据环境设计器”窗口、“项目管理器”窗口或“数据库设计器”窗口中直接将字段、表或视图拖入表单,系统将产生相应的控件并与字段向联系。 默认情况下,如果拖动的是字符型字段,将产生文本框控件,如果拖动的是备注型字段,将产生编辑框控件;如果拖动的是表或视图,将产生表格控件。但用户可以选择“工具”菜单中的选项命令,打开“选项”对话框,然后在“字段映像”选项卡中修改这种映象关系。 8.5 常用表单控件标签(Label)控件命令按钮(CommandButton) 控件命令组(CommandGroup)控件文本框(textBox)控件编辑框(editbox)控件复选框(checkbox)控件选项组(optiongroup)控件列表框(listbox)控件组合框(combox)控件表格(grid)控件页框(pageframe)控件8.5.1 标签(Label)控件可以编写代码来改变 Label 控件显示的文本,以响应运行时的事件。例如,如果一个应用程序要几分钟时间作改动,则可以显示 Label 中的进程状态信息。还可以使用 Label 来标识控件,例如 TextBox 控件没有自己的 Caption 属性,这时就可以使用 Label 来标识这个控件。在 Label 控件中定义访问键时,就可以按 ALT + 设定的字符来把焦点移动到 TAB 键顺序中的下一个控件。常用的标签属性1. Caption属性 当创建一个新的对象时,其缺省标题为缺省的 Name 属性设置。该缺省标题包括对象名和一个整数,如 Command1 或 Form1。为了获得一个描述更清楚的标签,应对 Caption 属性进行设置。可以使用 Caption 属性赋予控件一个访问键。在标题中,在想要指定为访问键的字符前加一个 (<) 符号。比如,下面代码在为标签设置Caption属性的同时,指定了一个访问键“x”:ThisForm.MyLabel.Caption="选择项目(<X)"对于一般控件,按下相应的访问键,将激活该控件,使该控件获得焦点。而对于标签,按下相应的访问键,将把焦点传递给tab键次序中紧跟着标签的下一个控件。比如,在某个列表框的上方 放置一个标签,并把列表框的Tab键次序安排在标签之后,这样,按下标签访问键时,其下方的列表获得焦点。访问键的使用方法受KEYCOMP设置(DOS或WINDOWS)的影响。在当前表单激活的情况下,访问键的使用方法如表所示。 设置值效果DOS直接按访问键选择对象,若当前焦点处于组合框、列表框等要接收键盘输入的对象时,访问键无效。WINDOWS一般情况下直接按访问键选择对象。若当前焦点处于组合框、列表框等要接收键盘输入的对象时,按组合键Alt+<访问键选择对象。Label 控件标题的大小没有限制。对于窗体和所有别的有标题的控件,标题大小的限制是 255 个字符。提示 对于标签来说,将 AutoSize 属性设为 True 自动调整控件的大小以与其标题相适合。 2. Alignment属性指定的标题文本在控件中显示的对齐方式 。语法object.Alignment = number,该属性的设置值如表所述。设置值说明0(默认值)左对齐,文本显示在区域的左边1右对齐,文本显示在区域的右边2中央对齐,将文本居中排放,使左右两边的空白相等例 表单中有三个标签,当鼠标单击任何一个标签时,都使其他两个 标签的标题互换。 内容要点:假设三个标签的名称(name属性值)分别是Label1、Label2、Label3,它们可以从属性窗口中获得。标签Label1的Click事件代码为:t=thisform.Label2.Captipnthisform.Label2.Caption=thisform.Label3.Captionthisform.Label3.Caption=t 标签Label2的click事件代码为:t=thisform.label1.Captionthisform.Label1.Caption=thisform.Label3.Captionthisform.Label3.Caption=t 标签Label3的click事件代码为:t=thisform.Label1.Captionthisform.Label1.Caption=thisform.Label2.Captionthisform.Label2.Caption=t 操作步骤:创建表单,然后在表单中添加3个标签按钮。 分别为3个标签控件设置caption属性,如示意图所示。 分别为3个标签控件设置click事件代码。 8.5.2 命令按钮(CommandButton) 控件CommandButton 控件可以开始、中断或者结束一个进程。选取这个控件后,CommandButton 显示按下的形状,所以有时也称之为下压按钮。为了在 CommandButton 控件上显示文本,需要设置其 Caption 属性。可以通过单击 CommandButton 选中这个按钮。为了能够在按 ENTER 键时也选中命令按钮,需要将其 Default 属性设置为 True。为了能够按 ESC 键时也选中 CommandButton,则需要将 CommandButton 的 Cancel 属性设置成 True。常用属性有以下几个:1. default属性返回或设置一个值,以确定哪一个 CommandButton 控件是窗体的缺省命令按钮。语法object.Default = booleanDefault 属性语法包含下面部分: 部分描述Object对象表达式Boolean布尔表达式,指定该命令按钮是否为缺省按钮,设置值boolean 的设置值为 设置值描述True该 CommandButton 是缺省命令按钮。False(缺省值)该 CommandButton 不是缺省命令按钮。窗体中只能有一个命令按钮可以为缺省命令按钮。当某个命令按钮的 Default 设置为 True 时,窗体中其它的命令按钮自动设置为 False。确认按钮的行为要受KEYCOMP设置(DOS或WINDOWS)的影响。在“确认”按钮所在的表单激活的情况下,“确认”按钮的行为如表所示。 设置值效果DOS按Ctrl+Enter,选择“确认”按钮,执行 click事件代码WINDOWS当焦点不在命令按钮上时,按enter,选择“确认”按钮,执行click事件代码。2. Cancel 属性 使用 Cancel 属性使得用户可以取消未提交的改变,并把窗体恢复到先前状态。窗体中只能有一个 CommandButton 控件为取消按钮。当一个 CommandButton 控件的 Cancel 属性被设置为 True,窗体中其它 CommandButton 控件的 Cancel 属性自动地被设置为 False。当一个 CommandButton 控件的 Cancel 属性设置为 True 而且该窗体是活动窗体时,用户可以通过单击它,按 ESC 键,或者在该按钮获得焦点时按 ENTER 键来选择它。 3. Enabled 属性Enabled 属性允许在运行时使窗体和控件成为有效或无效。默认值为.T.。Enabled 属性使得用户(程序)可以根据应用的当前状态随时决定一个对象是有效的还是无效的,也可以限制一个对象的使用,如用一个无效的编辑框(Enabled=.f.)来显示只读信息。说明:如果一个容器对象的enable属性值为.f.,那么它里面的所有对象也都不会响应用户引发的事件。 4. Visible属性指定对象可见还是隐藏。在表单设计器中,默认值为.T.,在程序代码中,默认值为.F.,一个对象即使是隐藏的,在代码中可以访问它。当一个表单由活动变成隐藏时,最近活动的表单或其他对象将成为活动的。当一个表单的Visible属性由.F.设置成.T.时,表单将成为可见的,但并不成为活动的。要使一个表单成为活动的,可使用show方法。show方法是表单成为可见的同时,使其成为活动的。 8.5.3 命令组(CommandGroup)控件命令组控件是包含一组命令按钮的容器控件,用户可以单个或作为一组来操作其中的 按钮。在表单设计器中,为了选择命令组中的某个按钮,有如下两种方法:从属性窗口的对象下拉式组合框中选择所需的命令按钮;用鼠标右键单击命令组,然后从弹出的快捷菜单中选择“编辑”命令,这样命令组就进入了编辑状态,用户可以通过鼠标单击来选择某个具体的命令按钮。常用的属性有:1. ButtonCount属性指定命令组中命令按钮的数目。在表单中创建一个命令组时,ButtonCount属性的默认值是2,既包含两个命令按钮。可以通过改变ButtonCount属性的值来重新设置命令组中的包含的命令按钮数目。 2. buttons属性用于存取命令组中各按钮的数组。该属性数组在创建命令组时建立,用户可以利用该数组为命令组中的命令按钮设置属性或调用其方法。例如,下面代码可以放在与命令组myCommandG处于同一表单中的某个对象的 方法或事件代码中,其命令组中的第二个按钮设置成隐藏的:ThisForm.myCommandG.Buttons(2).Visible=.F.属性数组下标的取值范围应该在1至ButtonCount属性值之间。该属性在设计时不可用。除了命令组,还适合于选项组。 3. value属性指定命令组当前的状态。该属性的类型可以是数值型的,也可以是字符型的。如果命令组内的某个按钮有自己的click事件代码,那么一旦单击该按钮,就会优先执行为它单独设置的代码,而不会执行命令组的click事件代码。该属性在设计和运行时可用。 8.5.4 文本框(textBox)控件用户利用它可以在内存变量、数组元素或非备注型字段中输入或编辑数据。文本框可以编辑任何类型的数据。如果编辑的是日期型或日期时间型数据,那么在整个内容被选定的情况下,按“+”或“-”,可以使日期增加一天或减少一天。为了在 TextBox 控件中显示多行文本,要将 MultiLine 属性设置为 True。如果多行 TextBox 没有水平滚动条,那么即使 TextBox 调整了大小,文本也会自动换行。为了在 TextBox 上定制滚动条组合,需要设置 ScrollBars 属性。如果文本框的 MultiLine 属性设置为 True 而且它的 ScrollBars 没有设置为 None (0),则滚动条总出现在文本框上。如果将 MultiLine 属性设置为 True,则可以在 TextBox 内用 Alignment 属性设置文本的对齐。如果 MultiLine 属性是 False,则 Alignment 属性不起作用。常用的属性为:1. ControlSource属性 一般情况下,可以利用该属性为文本框指定一个字段或内存变量。运行时,文本框首先显示该变量的内容。而用户对文本框的编辑结果,也会最终保存到该变量中。该属性在设计和运行时可用。除了文本框,还适用于编辑框、命令组、选项按钮、选项组、复选框、列表框、组合框等控件。 2. value属性返回文本框当前内容。该属性默认值是空串。如果ControlSource属性指定了字段或内存变量,则该属性将ControlSource属性指定的变量具有相同的数据和类型。为了在对话框中创建一个密码域应使用此属性。虽然能够使用任何字符,但是大多数基于 Windows 的应用程序使用 号 (*) (Chr(42)。此属性不影响 Text 属性;Text 准确地包括所键入或代码中所设置的内容。将 PasswordChar 设置为长度为 0 的字符串 ("") (缺省值),将显示实际的文本。能够将任意字符串赋予此属性,但只有第一个字符是有效的,所有其它的字符将被忽略。注意 如果 MultiLine 属性被设为 True,那么设置 PasswordChar 属性将不起效果。 3. InputMask属性指定在一个文本框中如何输入和显示数据。InputMask属性值是一个字符串。该字符串通常有一些所谓的模式符组成,每个模式符规定了相应的位置上数据的输入和显示行为。 X允许输入任何字符9允许输入数字和正负号#允许输入数字、空格和正负号$在固定位置上显示当前货币符号(由SET CURRENCY 命令指定)$在数值前面相邻的位置上显示当前货币符号(浮动货币符)*在数值左边显示*.指定小数点的位置,分隔小数点左边的数字串inputmask属性值中可包含其他字符,这些字符在文本框中将会原样显示。该属性在设计和运行时可用。除了文本框,还适用于组合框、列等控件。例 用表单设计一个登陆界面,如图所示,当输入用户名和口令并按确认键后,检验其输入是否正确,若正确(假定用户名为ABCDEF,口令为123456),就显示“欢迎使用.”若不正确,则显示“用户名或口令不对,”如果三次输入不正确,就显示“用户名或口令不对,登陆失败!”并关闭。要将“确认”按钮设置为Default按钮。另外,口令限制为6位数字,输入时显示*号。内容要点:假设“用户名”文本框、“口令”文本框以及“确认”命令按钮的name属性值分别为Text1、Text2和command1。Text2的InputMask属性值为999999,passwordChar属性值为*。Command1的Default属性值为.T.。命令按钮Command1的click事件代码如下,其中num是为表单新添加的属性,用以保存本次登陆输入的次数。if thisform.text1.value="ABCDEF" and thisform.text2.value="123456"wait"欢迎使用." window timeout 1thisform.releaseelsethisform.nu