VFP

来源:百度文库 编辑:神马文学网 时间:2023/01/29 07:40:49
常用的表单控件来源:http://www2.nbu.edu.cn/yemiaoqun/%B5%DA%B0%CB%D5%C2/8.5.htm

标签(Label)控件
命令按钮(CommandButton) 控件
命令组(CommandGroup)控件
文本框(textBox)控件
编辑框(editbox)控件
复选框(checkbox)控件
选项组(optiongroup)控件
列表框(listbox)控件
组合框(combox)控件
表格控件
页框控件

标签(Label)控件

    可以编写代码来改变 Label 控件显示的文本,以响应运行时的事件。例如,如果一个应用程序要几分钟时间作改动,则可以显示 Label 中的进程状态信息。还可以使用 Label 来标识控件,例如 TextBox 控件没有自己的 Caption 属性,这时就可以使用 Label 来标识这个控件。
    Label 控件中定义访问键时,就可以按 ALT + 设定的字符来把焦点移动到 TAB 键顺序中的下一个控件。
常用的标签属性

  • Caption属性
        当创建一个新的对象时,其缺省标题为缺省的 Name 属性设置。该缺省标题包括对象名和一个整数,如 Command1 或 Form1。为了获得一个描述更清楚的标签,应对 Caption 属性进行设置。
        可以使用 Caption 属性赋予控件一个访问键。在标题中,在想要指定为访问键的字符前加一个 (\<) 符号。比如,下面代码在为标签设置Caption属性的同时,指定了一个访问键“x”
    ThisForm.MyLabel.Caption="选择项目(\     对于一般控件,按下相应的访问键,将激活该控件,使该控件获得焦点。而对于标签,按下相应的访问键,将把焦点传递给tab键次序中紧跟着标签的下一个控件。比如,在某个列表框的上方 放置一个标签,并把列表框的Tab键次序安排在标签之后,这样,按下标签访问键时,其下方的列表获得焦点。
        访问键的使用方法受KEYCOMP设置(DOSWINDOWS)的影响。在当前表单激活的情况下,访问键的使用方法如表所示。
      设置值 效果 DOS 直接按访问键选择对象,若当前焦点处于组合框、列表框等要接收键盘输入的对象时,访问键无效。 WINDOWS 一般情况下直接按访问键选择对象。若当前焦点处于组合框、列表框等要接收键盘输入的对象时,按组合键Alt+<访问键〉选择对象。
  • Label 控件标题的大小没有限制。对于窗体和所有别的有标题的控件,标题大小的限制是 255 个字符。
    提示
    对于标签来说,将 AutoSize 属性设为 True 自动调整控件的大小以与其标题相适合。
  • Alignment属性
    指定的标题文本在控件中显示的对齐方式

语法
object.Alignment [= number],该属性的设置值如表所述。

设置值 说明 0 (默认值)左对齐,文本显示在区域的左边 1 右对齐,文本显示在区域的右边 2 中央对齐,将文本居中排放,使左右两边的空白相等

例 表单中有三个标签,当鼠标单击任何一个标签时,都使其他两个 标签的标题互换。
   内容要点:假设三个标签的名称(name属性值)分别是Label1、Label2、Label3,它们可以从属性窗口中获得。

  1. 标签Label1的Click事件代码为:
    t=thisform.Label2.Captipn
    thisform.Label2.Caption=thisform.Label3.Caption
    thisform.Label3.Caption=t
     
  2. 标签Label2的click事件代码为:
    t=thisform..label1.Caption
    thisform.Label1.Caption=thisform.Label3.Caption
    thisform.Label3.Caption=t
     
  3. 标签Label3的click事件代码为:
    t=thisform.Label1.Caption
    thisform.Label1.Caption=thisform.Label2.Caption
    thisform.Label2.Caption=t

操作步骤:

  1. 创建表单,然后在表单中添加3个标签按钮。
  2. 分别为3个标签控件设置caption属性,如示意图所示。
  3. 分别为3个标签控件设置click事件代码。

返回

命令按钮(CommandButton) 控件

    CommandButton 控件可以开始、中断或者结束一个进程。选取这个控件后,CommandButton 显示按下的形状,所以有时也称之为下压按钮。为了在 CommandButton 控件上显示文本,需要设置其 Caption 属性。可以通过单击 CommandButton 选中这个按钮。为了能够在按 ENTER 键时也选中命令按钮,需要将其 Default 属性设置为 True。为了能够按 ESC 键时也选中 CommandButton,则需要将 CommandButton Cancel 属性设置成 True

常用属性有以下几个:

  • default属性
    返回或设置一个值,以确定哪一个 CommandButton 控件是窗体的缺省命令按钮。
    语法
    object.Default [= boolean]
    Default 属性语法包含下面部分: 部分 描述 Object 对象表达式 Boolean 布尔表达式,指定该命令按钮是否为缺省按钮,

    设置值
    boolean 的设置值为

    设置值 描述 TrueCommandButton 是缺省命令按钮。 False (缺省值)该 CommandButton 不是缺省命令按钮。

        窗体中只能有一个命令按钮可以为缺省命令按钮。当某个命令按钮的 Default 设置为 True 时,窗体中其它的命令按钮自动设置为 False
        确认按钮的行为要受KEYCOMP设置(DOS或WINDOWS)的影响。在“确认”按钮所在的表单激活的情况下,“确认”按钮的行为如表所示。

    设置值 效果 DOS 按Ctrl+Enter,选择“确认”按钮,执行 click事件代码 WINDOWS 当焦点不在命令按钮上时,按enter,选择“确认”按钮,执行click事件代码。
  • Cancel 属性
        使用 Cancel 属性使得用户可以取消未提交的改变,并把窗体恢复到先前状态。窗体中只能有一个 CommandButton 控件为取消按钮。当一个 CommandButton 控件的 Cancel 属性被设置为 True窗体中其它 CommandButton 控件的 Cancel 属性自动地被设置为 False。当一个 CommandButton 控件的 Cancel 属性设置为 True 而且该窗体是活动窗体时,用户可以通过单击它,按 ESC 键,或者在该按钮获得焦点时按 ENTER 键来选择它。
  • Enabled 属性
       Enabled 属性允许在运行时使窗体和控件成为有效或无效。默认值为.T.
    Enabled 属性使得用户(程序)可以根据应用的当前状态随时决定一个对象是有效的还是无效的,也可以限制一个对象的使用,如用一个无效的编辑框(Enabled=.f.)来显示只读信息。
    说明:如果一个容器对象的enable属性值为.f.,那么它里面的所有对象也都不会响应用户引发的事件。
  • Visible属性
        指定对象可见还是隐藏。在表单设计器中,默认值为.T.,在程序代码中,默认值为.F.,一个对象即使是隐藏的,在代码中可以访问它。
        当一个表单由活动变成隐藏时,最近活动的表单或其他对象将成为活动的。当一个表单的Visible属性由.F.设置成.T.时,表单将成为可见的,但并不成为活动的。要使一个表单成为活动的,可使用show方法。show方法是表单成为可见的同时,使其成为活动的。

返回

命令组(CommandGroup)控件
    命令组控件是包含一组命令按钮的容器控件,用户可以单个或作为一组来操作其中的 按钮。
    在表单设计器中,为了选择命令组中的某个按钮,有如下两种方法:从属性窗口的对象下拉式组合框中选择所需的命令按钮;用鼠标右键单击命令组,然后从弹出的快捷菜单中选择“编辑”命令,这样命令组就进入了编辑状态,用户可以通过鼠标单击来选择某个具体的命令按钮。
常用的属性有:

  • ButtonCount属性
    指定命令组中命令按钮的数目。在表单中创建一个命令组时,ButtonCount属性的默认值是2,既包含两个命令按钮。可以通过改变ButtonCount属性的值来重新设置命令组中的包含的命令按钮数目。
  • buttons属性
    用于存取命令组中各按钮的数组。该属性数组在创建命令组时建立,用户可以利用该数组为命令组中的命令按钮设置属性或调用其方法。例如,下面代码可以放在与命令组myCommandG处于同一表单中的某个对象的 方法或事件代码中,其命令组中的第二个按钮设置成隐藏的:
        ThisForm.myCommandG.Buttons(2).Visible=.F.
    属性数组下标的取值范围应该在1至ButtonCount属性值之间。
    该属性在设计时不可用。除了命令组,还适合于选项组。
  • value属性
    指定命令组当前的状态。该属性的类型可以是数值型的,也可以是字符型的。如果命令组内的某个按钮有自己的click事件代码,那么一旦单击该按钮,就会优先执行为它单独设置的代码,而不会执行命令组的click事件代码。
    该属性在设计和运行时可用。

返回

文本框(textBox)控件
    用户利用它可以在内存变量、数组元素或非备注型字段中输入或编辑数据。文本框可以编辑任何类型的数据。如果编辑的是日期型或日期时间型数据,那么在整个内容被选定的情况下,按“+”或“-”,可以使日期增加一天或减少一天。
    为了在 TextBox 控件中显示多行文本,要将 MultiLine 属性设置为 True。如果多行 TextBox 没有水平滚动条,那么即使 TextBox 调整了大小,文本也会自动换行。为了在 TextBox 上定制滚动条组合,需要设置 ScrollBars 属性。如果文本框的 MultiLine 属性设置为 True 而且它的 ScrollBars 没有设置为 None (0),则滚动条总出现在文本框上。如果将 MultiLine 属性设置为 True,则可以在 TextBox 内用 Alignment 属性设置文本的对齐。如果 MultiLine 属性是 False,则 Alignment 属性不起作用。

常用的属性为:

  • ControlSource属性
     一般情况下,可以利用该属性为文本框指定一个字段或内存变量。运行时,文本框首先显示该变量的内容。而用户对文本框的编辑结果,也会最终保存到该变量中。
    该属性在设计和运行时可用。除了文本框,还适用于编辑框、命令组、选项按钮、选项组、复选框、列表框、组合框等控件。
  • value属性
    返回文本框当前内容。该属性默认值是空串。如果ControlSource属性指定了字段或内存变量,则该属性将ControlSource属性指定的变量具有相同的数据和类型。为了在对话框中创建一个密码域应使用此属性。虽然能够使用任何字符,但是大多数基于 Windows 的应用程序使用 号 (*) (Chr(42))。此属性不影响 Text 属性;Text 准确地包括所键入或代码中所设置的内容。将 PasswordChar 设置为长度为 0 的字符串 ("") (缺省值),将显示实际的文本。能够将任意字符串赋予此属性,但只有第一个字符是有效的,所有其它的字符将被忽略。
    注意 如果 MultiLine 属性被设为 True,那么设置 PasswordChar 属性将不起效果。
  • 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 1
thisform.release
else
thisform.num=thisform.num+1
if thisform.num=3
WAIT"用户名或口令不对,登陆失败!"window timeout 1
thisform.release
else
WAIT"用户名或口令不对,请重输!"window timeout 1
endif
endif
操作步骤:

  • 创建表单,然后在表单上添加两个标签、两个文本框和一个命令按钮。
  • 设置两个标签和一个命令按钮的caption属性值,并将命令按钮的default属性值设置为.T.。
  • 设置文本框text2的inputmask属性值。可在设置框直接输入999999或输入="999999"。设置文本框text2的passwordchar属性值。
  • 从“表单”菜单选择“新建属性”命令,打开“新建属性”对话框,为表单添加新属性num。然后在“属性”窗口中将其默认值设为0。
  • 设置“确认”按钮的click事件代码。

返回

编辑框(editbox)控件
    与文本框相似,但它有自己的特点:编辑框实际上是一个完整的字处理器,利用它能够选择、剪切、粘贴以及复制正文;可以实现自动换行;能够有自己的 垂直滚动条可以用箭头键在正文里面移动光标。编辑框只能输入、编辑字符型数据,包括字符型内存变量、数组元素、字段以及备注字段里的内容。

常用属性有:

  • allowtabs属性
    指定编辑框中能否使用tab键。其属性值设置如表所示。该属性在设计时和运行时均是可用的。
 设置值 说明 True (.T.) 编辑框里允许使用tab键;按Ctrl+Tab时焦点移出编辑框 False (.F.) 编辑框里不能使用tab键,按tab时焦点移出编辑框
  • hideselection属性
    指定当前编辑框失去焦点时,编辑框中的选定的文本是否仍显示为选定状态。该属性在设计时和运行时均是可用的。除了编辑框,还适用于文本框、组合框等控件。
     
 设置值 说明 True (.T.) (默认值)失去焦点时,编辑框中选定的文本不显示为选定状态。当编辑框再次获得焦点时,选定文本重新显示为选定状态 False (.F.) 失去焦点时,编辑框中选定的文本仍显示为选定状态
  • readonly属性
    指定用户能够编辑编辑框中的内容。其属性设置如表所示。readonly属性与enabled属性是有区别的。尽管在readonly为.T.和enabled为.F.两种情况下,都使编辑框具有只读的特点,但在前两种情况下,用户仍能够移动焦点至编辑框上并使用滚动条,而后种情况则不可能。该属性在设计时可用,在运行时可读写。除了编辑框,还适用于文本框、表格等控件。

 设置值 说明 True (.T.) 不能编辑编辑框中的内容 False (.F.) (默认值)能够编辑编辑框中的内容
  • srollbars属性
    指定编辑框是否具有滚动条,当属性值为0时,编辑框没有滚动条;当属性值为2时,编辑框有垂直滚动条。
    该属性在设计时可用,在运行时可写。除了编辑框,还适用于表单、表格等控件。

  • selstart属性
    返回用户在编辑框中所选文本的起始点位置(没有文本选定时)。也可用以指定要选文本的起始位置或插入点位置。属性的有效取值范围在0与编辑区中的字符总数之间。
    该属性在设计时不可用,在运行时可读写。除了编辑框,还适用于文本框、组合框等控件。

  • selLength属性
    返回用户在控件的文本输入区中所选定字符的数目,或指定要选定的字符数目。属性的有效范围在0与编辑区中的字符总数之间,若小于0,将产生一个错误。
    该属性在设计时不可用,在运行时可写。除了编辑框,还适用于文本框、组合框等控件。

  • seltex属性
    返回用户编辑区内选定的文本,如果没有选定任何文本,则返回空串。该属性在设计时不可用,在运行时可读写。除了编辑框,还适用于文本框、组合框等控件。
    selstart属性、selLength属性和seltex属性配合使用,可以完成诸如设置插入点的位置、控制插入点的移动范围、选择字串、清除文本等的一些任务。

使用这些属性时,需要注意它们的以下行为:

  • 如果把sellength属性值设置成小于0,将产生一个错误。
  • 如果selstart的设置值大于文本总字符数,系统将其调整为文本的总字符数,即插入点位于文本末尾。
  • 如果改变了selstart属性的值,系统将自动把sellength属性值设置0如果selstart属性设置成一个新值,那么这个新值会去置换编辑区中的所选文本并将sellength置为0。
  • 如果sellength值本来就是0,那么新值就会被插入到插入点处。

例 表单里饱含一个编辑框edit1和两个命令按钮command1(查找)、command2(替换),如图所示,要求:单击command1时,选择edit1里的某个单词example;单击command2时,用单词exercise置换一选择的单词example。

内容要点:
编辑框的hideselection属性值为.F.,这样“查找”命令按钮找到的字符串就会显示成选定状态。
命令按钮command1的click事件代码为:
n=at("example",thisform.edit1.value)
if n<>0
 thisform.edit1.selstart=n-1
  thisform.edit1.sellength=len("example")
else
WAIT WINDOWS"没有相匹配的单词"TIMEOUT1
endif
命令按钮command2的click事件代码为:
if thisform.edit1.seltex="example"
thisform.edit1.seltext="excercise"
else
WAIT WINDOWS"没有选择需要置换的单词"TIMEOUT1
endif

操作步骤:

  • 创建表单,然后在表单上田纪一个编辑框两个命令按钮。
  • 检查编辑框控件的name属性值是否与题目中所说的名称一致。
  • 如果不一致,应该进行设置,否则,就需要对上面的代码作相应的修改。
  • 设置编辑框的hide selection属性值。分别设置两个命令按钮的caption属性值。
  • 分别为两个命令按钮设置click事件代码。

返回

复选框(checkbox)控件
    一个复选框用于标记一个两值状态,如真(.T.)或假(.F.)。当处于真状态时,复选框内显示一个对勾;否则,复选框内为空白。

  • caption属性
    用来指定复选框旁边的文字。
  • value属性
    用来指明复选框的当前状态。设置值有三种情况如表所示

复选框(checkbox)控件
    一个复选框用于标记一个两值状态,如真(.T.)或假(.F.)。当处于真状态时,复选框内显示一个对勾;否则,复选框内为空白。

  • caption属性
    用来指定复选框旁边的文字。
  • value属性
    用来指明复选框的当前状态。设置值有三种情况如表所示
属性值 说明 0或.f. (默认值),未被选中 1或.t. 被选中 2或.null. 不确定,只在代码中有效
  • controlsource属性
    指明与复选框建立联系的数据源。作为数据源的字段变量或内存变量,其类型可以是逻辑型或数值型。对于逻辑型变量,值.F.、.T.和.null.分别对应复选框未被选中、被选中和不确定。对于数值型变量,值0、1和2(或.null.)分别对应复选框未被选中、被选中和不确定。用户对复选框操作结果会自存储到数据源变量以及value属性中。
    复选框的不确定状态与 不可选状态不同。不确定状态只表明复选框的当前状态值不属于两个正常状态之中的一个,但用户仍能对其进行选择操作,并使其变为确定状态。而不可选状态则表明用户现在不适合针对它作出某种选择。在屏幕上,不确定状态复选框以灰色显示,标题文字正常显示。而不可选状态复选框标题文字的显示颜色由diasbledbackcolor和diasbledforecolor

返回

选项组(optiongroup)控件

    选项按钮组是包含选项按钮的容器。通常,选项按钮允许用户指定对话框中几个操作选项中的一个,而不是输入数据。

设置选项按钮组中的选项按钮数目

    在表单中创建一个选项按钮组时,它默认地包含两个选项按钮,改变 ButtonCount 属性可以设置选项按钮组中的选项按钮数目。

  • ButtonCount属性
    设置 ButtonCount 属性,表示所需的选项按钮数目。
  • Value 属性
    选项按钮组的 Value 属性表明用户选定了哪一个按钮。例如,选项按钮组有六个选项按钮,如果用户选择了第四个选项,选项按钮组的 Value 属性就是 4。
  • ControlSource 属性
    指明与选项组建立联系的数据源。作为选项组数据源的字段变量或内存变量,其类型可以示数值型或字符型。比如,变量值为数值型3,则选项组中第三个按钮被选中;若变量值为字符型“option3”,则caption属性值为“option3”的按钮被选中。用户对选项组操作结果会自动存储到数据源变量以及value属性中。
  • Buttons 属性
    还可以在运行时刻使用 Buttons 属性,并指定选项按钮在组中的索引号来设置这些属性。例如,如果 optCust 是组中的第三个按钮,下面一行代码同样完成对 optCust 标题的设置:
    THISFORM.opgChoices.Buttons(3).Caption = "Sort by Customer"

返回

列表框(listbox)控件
    列表框提供一组条目(数据项),用户可以从中选择一个或多个条目。一般情况下,列表框显示其中的若干条目,用户可以通过滚动条浏览其他条目。
    常用的属性:

  • rowsourcetype    rowsourcetype属性指明列表框中条目数据源的类型,rowsource属性指定列表框的条目数据源。    rowsourcetype属性的取值范围及含义如下表所示。
    属性值 说明 0 无(默认值)。在程序运行时,通过additem方法添加列表框条目,通过removeitem方法移去列表框条目 1 值。通过rowsource属性手工指定的具体的列表框条目 2 别名。江表中的字段执作为列表框的条目。columncount属性指定要取的字段数目,也就是列表框的列数。指定的字段总是表中最前面的若干字段。 3 sql语句。将sql select语句的执行结果作为列表框的条目的数据源。 4 查询(.pqr)。将.pqr文件执行产生的结果作为列表框条目的数据源 5 数组。将数组中的内容作为列表框条目的来源。 6 字段。将表中的一个或几个字段作为列表框条目的数据源 7 文件。将某个驱动器和目录下的文件名作为列表框的条目,在运行时,用户可以选择不同的驱动器和目录,可以利用文件名框架指定一部分文件。如要在列表框中显示当前目录下visual foxpro表文件清单,可将rowsource属性设置为*.dbf 8 结构。将表中的字段名作为列表框的条目,由rowsource属性指定表。若Rowsource属性值为空,则列表框显示当前表中的 字段名清单 9 弹出式菜单。将弹出式菜单作为列表框条目的数据源
两个属性在设计和运行时可用。还适合于组合框。
  • list属性    用以存取列表框中数据条目的字符串数组。    该属性在设计时不可用,在运行时可读写。还适合于组合框。
  • istcount属性    指明列表框中数据条目的数目。    该属性在设计时不可用,在运行时只读。还适合于组合框。
  • columncount属性    指定列表框的列数    对于列表框和组合框,该属性在设计和运行时可用。还适合于组合框和表格。
  • value属性    返回列表框中别选中的条目。该属性值可以是数值型也可以是字符型。如果列表框不止一列,则返回由    boundcolumn指明的列上的数据项。    对于列表框和组合框。该属性只读,该属性的取值及类型总是与controlsource属性所指定的字段或内存变量    的取值及类型保持一致。
  • controlsource属性    该属性在列表框中的用法与其他控件中的用法有所不同。在这里,用户可以通过该属性指定的一个字段或变量    用以保存用户从列表框中选择的结果。
  • selectd属性    制定列表框内的某个条目是否处于选定状态。
  • multiselect属性    指定用户能否在列表框控件内进行多重选定。
返回
组合框(combox)控件组合框和列表框类似,主要区别在于:组合框只有一个条目是可见的。组合框不提供多重选择的功能。
组合框有两种形式:下拉组合框和下拉列表框,通过设置style属性可选择想要的形式。
返回

表格控件
    表格是一个容器对象,和表单集包含表单一样,表格也能包含列。这些列除了包含标头和控件外,每一个列还拥有自己的一组属性事件方法程序,从而为表格单元提供了大量的控件。

表格设计的基本操作

  • 调整表格中列的宽度
    在表格设计方式下,将鼠标指针置于表格列的标头之间,这时指针变为带有左右两个方向箭头的竖条。
    将列拖动到需要的宽度或者在“属性”窗口中设置列的 Width 属性。
  • 调整表格中行的高度

  1. 在表格设计方式下,将鼠标指针置于“表格”控件左侧的第一个按钮和第二个按钮之间,这时指针将变成带有向上和向下箭头的横条。

  2. 将行拖动到需要的宽度。

 – 或者 –在“属性”窗口中设置列的 Height 属性。
提示AllowRowSizing 设置为“假”(.F.),可以防止用户在运行时刻改变表格行的高度。

表格设计也可以调用表格生成器来进行。步骤如下:
  • 先在表单上放置一个表格。
  • 右键单击表格在弹出的快捷菜单中选择表单生成器打开生成器对话框,然后设置有关参数。

生成器选项卡的含义

  • 表格项指定要在表格中显示的字段。

  • 样式指定表格显示的样式。

  • 布局指定列标题和控件类型。

  • 关系指定表格字段与表字段之间的关系。

常用的表格属性

  • recordsourcetype属性
    recordsourcetype属性指明表格数据源的类型,recordsource属性指定表格数据源。

属性值 说明 0 表。数据来源于由recordsourse属性指定的表,该表被自动打开 1 (默认值)别名。数据来源于已打开的表,由recordsource属性指定该表的别名 2 提示。运行时,由用户根据提示选择表格数据源 3 查询。数据来源于查询,由recordsource属性指定一个查询文件 4 sql语句,数据来源于sql语句,由recordsource属性指定一条sql语句
设置了表格的recordsource属性后,可以通过cintrolsource属性为表格中的一列指定它所要显示的内容,如果不指定,该列将显示表格数据源中下一个没有显示的字段。这两个属性在设计时可用,在运行时可读写,都适用于表格。
  • ColumnCount 属性    指定列的数目。如果 ColumnCount 设置为 -1,表格将具有和表格数据源中字段数一样多的列。
  • linkmasker属性    显示在表格中的子记录的父表。
  • childorder    和父表主关键字相联接的子表中的外部关键字
  • relationalexpr属性    确定基于主表字段的关联表达式。

常用的列属性

下表列出了在设计时刻常用的列属性。

属性 说明 ControlSource 在列中要显示的数据。常见的是表中的一个字段。 Sparse 如果将 Sparse 属性设置为“真”(.T.),表格中控件只有在列中的单元被选中时才显示为控件(列中的其他单元仍以文本形式显示)。将 Sparse 设置为“真”(.T.),允许用户在滚动一个有很多显示行的表格时能快速重画。 CurrentControl 表格中哪一个控件是活动的。默认值为“Text1”。如果在列中添加了一个控件,则可以将它指定为 CurrentControl。

交互地在表格列中添加控件,操作步骤如下:

  1. 表单中添加一个表格。
    “属性”窗口中,将表格的 ColumnCount 属性设置为需要的列数。
    例如,如果需要一个两列的表格则键入“2”。
  2. 在“属性”窗口的“对象”框中为控件选择父列。
    例如,要选择 Column1 来添加控件,当选择这一列时,表格的边框发生变化,表明正在编辑一个包含其中的对象。
  3. “表单控件”工具栏中选择所要的控件,然后单击父列。
    在“表单设计器”中,新控件不在表格列中显示,但在运行时刻会显示出来。
  4. 在“属性”窗口中,要确保该控件缩进显示在“对象”框中父列下面。如果新控件是一个复选框,应将复选框的 Caption 属性设置为“ ”,并将列的 Sparse 属性设置“假”(.F.)。
  5. 将父列的 ControlSource 属性设置为需要的表字段。
    例如,下面的演示中,列的 ControlSource 属性是文件 TESTDATA.DBC 的 products.discontinu,这个文件保存在 \Samples\VFP\DATA 目录下。
  6. 将父列的 CurrentControl 属性设置为新加入的控件。

当运行表单时,这个控件将显示在表格列中。
在运行时刻,复选框显示在列中。
提示 如果想让复选框在表格列中居中,可先创建一个容器类,将复选框添加到容器类中,并调整复选框在容器类中的位置。然后将容器类添加到表格列中,并将复选框的 ControlSource 属性设置为需要的字段。

若要在“表单设计器”中移去表格列中的控件。

  1. “属性”窗口的对象框中选择要移去的控件。
  2. 激活“表单设计器”
  3. 如果“属性”窗口可见,控件的名称将显示在“对象”框中。
  4. 按下 DELETE 键。

也可以在代码中使用 AddObject 方法程序将控件添加到表格列中。

返回

页框(pageframe)控件
  
页框是包含页面的容器对象,页面又可包含控件。可以在页框、页面或控件级上设置属性。
    查看使用页框的示例操作如下:

  1. 运行 Solution.app ,该文件位于 Visual Studio …\Samples\Vfp98\Solution 目录下。
  2. 在目录树视图中,单击“Controls”,然后选取“Page frame”。

可以把页框想象为有多层页面的三维容器,只有最上层页面(或在页框的顶部)中的控件才是可见和活动的。

    表单上一个页框可有多个页面,页框定义了页面的位置和页面的数目,页面的左上角固定在页框的左上角。控件能放置在超出页框尺寸的页面上。这些控件是活动的,但如果不从程序中改变页框的 HeightWidth 属性,那么这些控件不可见。
    使用页框和页面,可以创建带选项卡的表单或对话框,和“项目管理器”中见到的一样。
    此外,用页框还能在表单中定义一个区域,在这个区域中可以方便地将控件换入换出。例如,在向导中,表单的大部分内容是保持不变的,但有一个区域在每一步都要更改。此时不必为向导的不同步骤创建五个表单,而只需创建一个带有页框的表单,页框中有五个页面即可。

    将页框添加到表单的操作步骤如下:

  1. “表单控件”工具栏中,选择“页框”按钮并在“表单”窗口拖动到想要的尺寸。
  2. 设置 PageCount 属性,指定页框中包含的页面数。

    向页框中添加控件的操作步骤如下:

  1. 从页框的快捷菜单中选择“编辑”命令,将页框激活为容器。页框的边框变宽,表示它处于活动状态。

  2. 同与向表单中添加控件的方法,向页框中添加控件。

注释 和其他容器控件一样,必须选择页框,并从用鼠标右键弹出的快捷菜单中选择“编辑”命令,或在“属性”窗口的“对象”下拉列表中选择容器。这样,才能先选择这个容器(具有宽边),再朝正设计的页面中添加控件。在添加控件前,如果没有将页框作为容器激活,控件将添加到表单中而不是页面中,即使看上去好象是在页面中。

    在页框中选择不同的页面的操作方法如下:

  1. 单击鼠标右键,将页框作为容器激活,然后选择“编辑”。

  2. 选择要使用的页面选项卡。

– 或者 –

   在“属性”窗口的“对象”框中选择这一页面。

– 或者 –

   在“表单设计器”底部的“页”框中选择这一页面。

   将控件添加到页面上的操作方法:

   如果将控件添加到页面上,它们只有在页面活动时才可见和活动。

  1. “属性”窗口的“对象”框中选择页面,页框的周围出现边框,表明可以操作其中包含的对象
  2. “表单控件”工具栏中,选择想要的控件按钮并在页面中调整到想要的大小。

   管理“页面”选项卡上的长标题

     如果选项卡上的标题太长,不能在给定页框宽度和页面数的选项卡上显示出来,可以有下面两种选择:

  • TabStretch 属性设置为“1 - 单行”,这样只显示能放入选项卡中的标题字符,“单行”是默认设置。
  • 将 TabStretch 属性设置为“0 - 多重行”,这样选项卡将层叠起来,以便所有选项卡中的整个标题都能显示出来。

   在程序中换页面

     不管页框是否具有选项卡,都可以从程序中使用 ActivePage 属性来激活一个页面。例如,下面列出表单中一个命令按钮的 Click 事件过程代码,它将表单中页框的活动页面改为第三页面。
THISFORM.pgfOptions.ActivePage = 3
 

常用的页框属性

下表列出了在设计时刻常用的页框属性。

属性 说明 Tabs 确定页面的选项卡是否可见。 TabStyle 是否选项卡都是相同的大小,并且都与页框的宽度相同。 PageCount 页框的页面数。

例 设计一个包含两个选项卡的查询对话框,用于设置查询学生数据时所需的参数。“条件”选项卡用于设置出生日期,“输出”选项卡用于设置显示字段。单击“确认”按钮将根据设置的参数查询显示有关学生数据。单击“取消”按钮,关闭对话框。
 

条件选项卡

“输出”选项卡

操作过程:

  1. 创建一个新表单,打开“数据环境设计器”窗口,向其中添加学生表。
  2. 通过“表单控件”工具栏在表单上添加一个页框控件和两个命令按钮。
  3. 右键单击页框控件,在弹出的快捷菜单中选择“编辑”命令。单击选择页框中的第一个页面(page1),然后在其中添加选项组(将buttoncount属性值设置成4),并添加相应的标签和文本框控件。
  4. 单击页框中的第二个页面(page2),然后在其中添加两个列表框及相应的标签和命令按钮。
  5. 设置表单及表单中的各标签、命令按钮和选项按钮的caption属性值,并调整好表单及表单内各控件的位置与大小。
  6. 将“可选字段”列表框(list1)的rowsourcetype属性值设置成8(结构),rowsource属性值设置成“学生”,multiselect属性值设置成.t.。
  7. 将“被选字段”列表框(list2)的rowsourcetype属性值设置成0(无),multiselect属性值设置成.t.。该列表框的条目将在表单运行过程中通过方法additem和removeitem添加和删除。
  8. 为使表单符合对话框的特点,将表单的maxbutton和minbutton属性值设置成.f.,
  9. 设置“所有学生”选项按钮的click事件代码:
    this.parent.parent.text1.enabled=.f.
    this.parent.parent.text2.enabled=.f.
    this.parent.parent.text3.enabled=.f.
    this.parent.parent.text4.enabled=.f.
  10. 设置其他各选项按钮的click事件代码。
    设置“在……之前”选项按钮的click事件代码:
    this.parent.parent.text2.enabled=.f.
    this.parent.parent.text3.enabled=.f.
    this.parent.parent.text4.enabled=.f.
    this.parent.parent.text1.enabled=.t.
    设置“在……之后”选项按钮的click事件代码:
    this.parent.parent.text1.enabled=.f.
    this.parent.parent.text3.enabled=.f.
    this.parent.parent.text4.enabled=.f.
    this.parent.parent.text2.enabled=.t.
    设置“在……之间”选项按钮的click事件代码:
    this.parent.parent.text1.enabled=.f.
    this.parent.parent.text2.enabled=.f.
    this.parent.parent.text3.enabled=.t.
    this.parent.parent.text4.enabled=.t.
  11. 设置“添加”命令按钮的click事件代码:
    for i=1 to this.parent.list1.listcount
    if this.parent.list1.selected(i)
       this.parent.list2.additem(this.parent.list1.list(i))
    endif
    endfor
  12. 设置“移去”命令按钮的click事件代码:
    i=1
    do while i<=this.parent.list2.listcount
    if this.parent.list2.selected(i)
      this.parent.list2.removeitem(i)
    else
      i=i+1
    endif
    enddo
  13. 设置“确认”命令按钮的click事件代码:
    *生成条件表达式字符串
    cond=""
    me=thisform.pageframe1.page1.optiongroup1.value
    do case
    case me=2
    cond="出生日期case me=3
    cond="出生日期>ctod(thisform.pageframe1.page1.text2.value)"
    case me=4
    cond="出生日期>ctod(thisform.pageframe1.page1.text3.value);
    .and.出生日期endcase
    *生成输出项字符串
    items=""
    if thisform.pageframe1.page2.list2.listcount=0
    items="*"
    else
    for i=1 to thisform.pageframe1.page2.list2.listcount
    items=items+thisform.pageframe1.page2.list2.list(i)+","
    endfor
    items=subs(items,1,len(items)-1)
    endif
    if cond==""
    select &items from 学生表
    else
    select &items from 学生表 where &cond
    endif
  14. 设置“取消”命令按钮的click事件代码:
    thisform.release