Default
.T.
Cancel
.T.
(3)Command1命令按钮的Click事件代码:
ThisForm.Release
(4)保存表单并运行。
8.2.2命令按钮组(CommandGroup)
命令按钮组是容器类控件,可以包含多个命令按钮。
命令按钮组和组内命令按钮都有各自的属性、事件和方法。
因此,既可以单独操作某个命令按钮,也可以对命令按钮组进行整体操作。
1.命令按钮组的常用属性
(1)ButtonCount:
用于设置命令组中所含按钮的数目,该属性值为数值型,其系统默认值为2,即包含2个命令按钮。
(2)Buttons:
用于存取命令按钮组中各按钮的数组。
在创建按钮组时建立该属性数组,可以用该数组为命令按钮组中的命令按钮设置属性或调用方法。
如,将命令按钮组中第2个按钮的标题改为“OK”,可用下列语句:
ThisForm.CommandGroup1.Buttons(3).Caption=’OK’
Buttons属性数组下标的取值范围在1至ButtonCount属性值之间。
(2)Value:
通过命令按钮组的Value属性值,可以判断用户单击组内的哪个按钮。
Value属性值可以为数值型(系统默认值为数值1)或字符型。
若Value属性的初始值设置为数值型,则Value将获得用户所单击按钮在组内的顺序号;若Value属性的初始值设置为字符型,则Value将获得用户所单击的按钮的Caption属性值。
2.命令按钮组生成器
与其他控件一样,命令按钮组的属性可以利用属性窗口设置,但对于某些属性,使用命令按钮组生成器设置较为方便。
打开生成器的方法:
从命令按钮组的快捷菜单中选择“生成器”,在生成器中可以设置命令按钮组中的按钮数目、按钮标题及按钮布局等。
3.命令按钮组中按钮的编辑
若对命令按钮组中某个按钮进行设计,可采用以下两种方法:
方法一:
在“属性”窗口的“对象选择框”中选择命令按钮。
方法二:
从命令按钮组的快捷菜单中选择“编辑”命令,进入编辑状态后,单击某个命令按钮进行单独地编辑操作。
这种编辑操作的方法对于其他容器类对象,如选项按钮组和表格等,同样适用。
【例8.2】在运行表单时,单击表单上命令按钮组中的某个按钮,将该按钮的标题显示到标签上。
具体制作步骤如下:
(1)新建表单文件Frm8_2.SCX。
(2)表单中所添加的对象及其属性如表8.3。
表8.3表单Frm8_2.SCX中控件及其属性
对象名
属性名
属性值
Label1
Caption
你所选择的按钮是:
Label2
Caption
CommandGroup1
ButtonCount
3
Value
1
Command1
Caption
No1
Command2
Caption
No2
Command3
Caption
No3
(3)命令按钮组CommandGroup1的Click事件代码如下:
n=This.Value&&将单击选中的命令按钮序号保存在变量n中
DoCase
Casen=1
ThisForm.label2.Caption=This.Command1.Caption&&注意Thisform和This的含义
Casen=2
ThisForm.label2.Caption=This.Command2.Caption
Casen=3
ThisForm.label2.Caption=This.Command3.Caption
EndCase
(4)运行表单。
如果将命令按钮组CommandGroup1的Value初值设为字符型(如:
Command1),则本例CommandGroup1的Click事件代码可以简化为:
ThisForm.label2.Caption=This.Value
由此例可以看出,适当设置对象的有关属性,可能会简化程序代码。
8.3编辑类控件
在表单运行时,可以通过编辑类控件输入数据,从而提供程序运行时所需要的数据。
编辑类控件主要有文本框和编辑框两种。
8.3.1文本框(TextBox)
文本框用于输入或编辑数据,且文本框内只能包含一段数据,即当输入回车时,文本框内数据的输入随即终止。
文本框可编辑的数据类型可以是字符型、数值型、逻辑型或日期型数据,具体的数据类型与其Value属性的初始值有关。
1.文本框的常用属性
(1)Value:
用于接收用户由键盘输入的信息,或将相应数据在文本框内显示。
文本框可以接收的数据类型与其Value的初始值有关。
若Value的初始值为空(系统默认)或字符型,则表示接收字符型数据;若Value的初始值为数值型数据,则表示接收数值型数据;若Value的初始值为.F.或.T.,则接收逻辑型数据;若Value的初始值为{}时,则表示接收日期型数据。
(2)PasswordChar:
可以设置文本框内是显示输入的字符,还是显示指定的占位符。
系统默认值为空,即文本框内显示输入的字符。
若将该属性值设置成一个字符(如*),则向文本框中输入的任何信息,在文本框中都将以该字符(如*)显示。
通常用于输入密码的文本框需要设置该属性。
(3)InputMask:
用于设置输入数据的格式,该属性值是一个格式字符串,其中每个字符规定了对应位的数据格式,格式字符串的长度规定了输入数据的宽度。
格式字符串中各个字符的含义如表8.4。
InputMask的系统默认值为空。
表8.4 InputMask属性值
符号
功能描述
X
允许输入任何字符
9
允许输入数字
#
允许输入数字、空格和正(+)、负(—)号
$
在固定位置上显示当前货币符号(由SetCurrency命令设定)
.
指定小数点位置
,
在对应位上显示逗号“,”
【例8.3】建立表单文件Frm8_3.SCX,使其运行时,对输入的日期和天数进行相加计算,并将计算后的新日期在标签上显示。
表单中所包含的对象及其属性、相应代码如表8.5。
表8.5Frm8_3表单中对象属性及代码
对象名
属性/事件名
属性值/代码
备注
Label1
Caption属性
日期:
Text1
Value属性
{}
Label2
Caption属性
天数:
Text2
Value属性
0
InputMask属性
######
Label3
Caption属性
用于显示新日期
Command1
Caption属性
计算新日期
Click事件
ThisForm.Label3.Caption=’新日期为:
’+;
DTOC(ThisForm.Text1.Value+ThisForm.Text2.Value)
【例8.4】设计一个用户登录窗口(如图8.1),要求最多允许输入3次用户名和密码。
具体制作步骤如下:
图8.1用户登录窗口
(1)建立表单Frm8_4.SCX,其中所包含的对象及其属性见表8.6。
表8.6表单Frm8_4中的对象及其属性表
对象名
属性名
属性值
说明
Form1
Caption
用户登录窗口
AutoCenter
.T.
使表单运行时自动居中于主窗口内
Label1
Caption
用户名:
Label2
Caption
密码:
Text1
InputMask
XXX
设置用户名长度为3个字符
Text2
InputMask
9999
设置密码是4位数字
PasswordChar
*
使用户所输入的密码以*号屏蔽
Command1
Caption
确认
Default
.T.
按回车键,触发此按钮的Click事件
Command2
Caption
退出
Cancel
.T.
按ESC键,触发此按钮的Click事件
(2)Form1的Init事件代码,初始化操作。
ThisForm.Text1.SetFocus&&使用户名文本框获得焦点,即其内出现插入点
PublicN&&定义公共变量N,N用于统计用户输入密码的次数
N=0
(3)Command1的Click事件代码,用户名及密码判断操作。
yhm=ThisForm.Text1.Value
mm=ThisForm.Text2.Value
IFLower(yhm)=="abc".AND.mm=="1234"
MessageBox("用户名和密码正确,恭喜您!
")
ThisForm.Release
ELSE
N=N+1
IFN=3
MessageBox("三次输入均错误,禁止进入系统!
")
ThisForm.Release
ELSE
MessageBox("用户名或密码错误!
请您重新输入")
ThisForm.Text1.Value=""
ThisForm.Text2.Value=""&&清空用户名及密码的输入区
ThisForm.Text1.SetFocus
ENDIF
ENDIF
(4)Command2的Click事件代码,关闭表单操作。
ThisForm.Release
2.控件与数据绑定
所谓数据绑定,就是将控件与数据源的数据结合在一起。
若要实现数据绑定,则需要为控件指定数据源。
控件绑定的意义在于数据源可以决定控件的值,而控件值的改变也将会直接影响数据源中的数据。
以文本框为例,当它与某个数据绑定后,文本框的Value属性值便与数据源的数据相对应,即:
文本框内显示的数据由数据源决定;反过来,通过修改文本框中的内容实现修改数据源中的数据。
控件可以通过其ControlSource属性与指定数据源进行绑定,数据源可以是数据环境中某表中的字段名,也可以是内存变量。
除了文本框有ControlSource属性以外,编辑框、列表框、组合框、选项按钮组和复选框等控件也有ControlSource属性,其设置方法和作用基本相同。
【例8.5】设计表单(如图8.2),使文本框与XSB表中的姓名字段绑定,通过“显示”按钮,检验修改文本框内的数据是否对表中当前记录的姓名字段值有影响。
具体制作步骤如下:
图8.2文本框数据绑定实例
(1)建立表单Frm8_5.SCX,并将XSB表添加至表单的数据环境中。
(2)表单中所包含的对象及其属性见表8.7。
表8.7表单Frm8_5中的对象及其属性
对象名
属性名
属性值
说明
Label1
Caption
姓名:
Text1
ControlSource
XSB.姓名
当数据环境中已添加表后,此值可以在属性输入区的下拉列表框中选择。
Label2
AutoSize
.T.
设置文本显示区域与文本大小一致
Label3
AutoSize
.T.
Command1
Caption
显示
用于显示当前记录的记录号及其姓名字段值
(3)Command1的Click事件代码:
ThisForm.Label2.Caption="当前记录号为:
"+Str(RecNo(),2)
ThisForm.Label3.Caption="当前记录的姓名为:
"+姓名
(5)运行表单,首先单击“显示”按钮,显示表中当前记录的姓名,然后修改文本框中的内容,再单击“显示”按钮,检验当前记录的姓名是否更改。
8.3.2编辑框(EditBox)
与文本框相似,编辑框也是用于输入或编辑文本,但编辑框与文本又有所不同,其主要区别如下:
•编辑框可以输入多段文本,按回车键仅作为每段文本的结束,不会终止编辑框的文本输入;而文本框仅能输入一段文本,按回车键将终止文本框的输入。
•编辑框仅能接收字符型或备注型数据,常用来处理较长的字符型或备注型数据;而文本框可以接收字符型、数值型、逻辑型或日期型4种数据。
编辑框的常用属性如下:
(1)AllowTabs:
设置编辑框中是否允许使用Tab键,此属性值的数据类型为逻辑型。
当AllowTabs值为.T.时,在编辑框中每按一次Tab键将产生一个制表位,按Ctrl+Tab键可将焦点移出编辑框。
当AllowTabs值为.F.(系统默认值)时,按Tab键直接将焦点移出编辑框。
(2)HideSelection:
用于指定当编辑框失去焦点时,是否显示选定文本的选定状态,此属性值为逻辑型。
若HideSelection值为.T.(系统默认值),当编辑框失去焦点时,将不显示选定文本的选定状态;若HideSelection值为.F.,当编辑框失去焦点时,仍然显示选定文本的选定状态。
(3)ReadOnly:
用于设置是否允许键盘修改编辑框中的内容,此属性值为逻辑型。
若ReadOnly值为.F.(系统默认值),则允许修改编辑框中的内容;反之,不允许修改编辑框中的内容。
(4)ScrollBars:
用于设置编辑框是否有垂直滚动条,此属性值为数值型。
若ScrollBars值为2(系统默认值),则编辑框包含垂直滚动条;若ScrollBars值为0,则编辑框没有滚动条。
(5)SelText:
用于获取编辑框中选定的文本内容。
若没有选定任何文本,则返回空串。
【例8.6】当选定编辑框中文本后,单击“提取”按钮,则将选定内容在文本框中显示。
表单Frm8_6和其中的对象、属性及代码如表8.8。
表8.8 表单Frm8_6中对象属性及代码表
对象名
属性/事件名
属性值/代码
说明
Form1
Caption属性
编辑框演示
Edit1
HideSelection属性
.F.
失去焦点时,选定文本仍然处于选定状态
ScrollBars属性
2
有垂直滚动条
Text1
此对象各属性均可用系统默认值
Command1
Caption属性
提取
Click事件
ThisForm.Text1.Value=This.Parent.Edit1.SelText
*此处请体会Parent的用法,及如何在文本框中显示数据
8.4列表类控件
列表类控件包括列表框和组合框两个控件,这两个控件都提供了列表,允许从列表中选择一行或多行数据进行操作。
8.4.1列表框(ListBox)
运行表单时,列表框中提供了一组数据项(条目),可以从中选择一行或多行数据。
1.列表框的常用属性
(1)RowSourceType:
用于设置列表框中数据源的类型,即:
指出列表框中显示的数据来源类型(见表8.9)。
(2)RowSource:
RowSource和RowSourceType属性一起使用。
RowSource属性指出列表框中显示的数据来源(见表8.9)。
表8.9 RowSourceType属性取值及RowSource的使用
RowSourceType值
列表框、组合框的数据源
0-无
(系统默认值)
在程序运行时,用AddItem方法添加列表框条目,用RemoveItem方法从列表框中移去条目。
1-值
用RowSource属性手工指定要在列表框中显示的条目,各条目之间用逗号分隔。
如,在属性窗口中设置RowSource属性:
英语,政治,计算机;在程序中设置RowSource属性:
ThisForm.List1.RowSource=”英语,政治,计算机”。
2-别名
将表中的字段值作为列表框条目的数据源。
表由数据环境提供,用RowSource属性指出表名,用ColumnCount属性指定字段个数,也就是列表框中所含的列数。
3-SQL语句
将SQLSelect语句的执行结果作为列表框条目的数据源。
在RowSource属性中填一条Select语句。
若在程序中设置RowSource属性,Select语句应作为字符型数据赋值,如,ThisForm.List1.RowSource=”Select*FromCJBIntoCursorTMP”
4-查询(QPR)
用查询的执行结果作为列表框条目的数据源。
RowSource属性应设置为一个具体的查询(QPR)文件。
如:
ThisForm.List1.RowSource=”xscx.qpr”
5–数组
将数组中的内容作为列表框条目的来源,即用数组中的元素填充列表框。
RowSource属性应设置为数组名,在表单的Init事件中定义数组及为元素赋值。
6-字段
将表中的一个或几个字段作为列表框条目的来源,RowSource属性中各字段间用逗号分隔,首字段应有表名前缀,表由数据环境提供。
如,ThisForm.List1.RowSource=”CJB.考试成绩,平时成绩,实验成绩”。
7-文件
将某个驱动器和目录下的文件名作为列表框的条目。
在RowSource属性中设置路径,也可以使用通配符,如,d:
\xsxxb\*.dbf。
表单运行时,可以选择不同的驱动器和目录。
8-结构
用RowSource属性指定表,将表中的字段名作为列表框的条目。
9-弹出式菜单
用一个先前定义的弹出式菜单作为列表框数据源。
(3)ListCount:
用于获取列表框中数据的行数。
此属性值在属性窗口中不可修改,在表单运行时只读。
(4)MultiSelect:
用于设置列表框中是否允许同时选定多行数据。
系统默认值为.F.,即不允许同时选定多行数据。
当其值为.T.时,允许同时选定多行数据。
在表单运行时,只需按住或键单击数据即可完成多选操作。
(5)List(i):
用于读取列表框中第i行数据。
此属性值在属性窗口中不可修改。
(6)Selected(i):
用于判断列表框中某个数据条目是否处于被选定状态,如果选定第i行数据,则Selectd(i)的值为.T.。
(7)ColumnCount:
指定列表框的列数。
(8)BoundColumn:
在列表框包含多项时指定哪一列作为Value属性的值。
(9)DisplayVal