第十四章表单设计(一)
表单建立的三种方式:一是利用表单设计器,二是利用系统提供的表单向导,三是利用表单生成器。
一、设计圆面积计算表单
(1)执行系统菜单中“文件”/“新建”命令,在“新建”对话框中选择“表单”,然后单击“新建文件”按钮,启动“表单设计器”窗口。
(2)在“表单设计器”窗口中,在“表单控件”工具栏中依次单击“标签”、“文本框”和“命令按钮”,在表单窗口中添加3个标签,2个文本框和2个命令按钮控件对象。
(3)然后为每个控件设定向相应的属性,各个控件的属性设置为:
(4)双击“计算”按钮,打开事件代码编辑窗口,从“过程”列表中选择“Click”事件代码:
r=THISFORM.TEXT1.VALUE&&将TEXT1文本框的值赋给r
THISFORM.TEXT2.VALUE=3.14159*VAL(R)*VAL(R)
(5)双击“退出”按钮,从“过程”列表中选择“Click”事件,然后输入Click事件代码:
THISFORM.RELEASE&&释放表单,结束运行
(6)保存并运行表单,输入圆的半径,单击“计算”按钮,则圆的面积将显示在“面积”后的文本框中。单击“退出”按钮,结束程序的运行。
二、设计求解一元二次方程的根的表单程序
一元二次方程的三个参数a,b,c从表单的文本框中输入,计算结果显示在相应的文本框中且只显示不能修改,请在表单设计器中完成该表单程序的设计,并参照表单设置表单对象(包括其所包含的控件)的属性与属性值,并写出“求解”和“退出”按钮的Click事件过程代码。
(1)“文件”菜单下“新建”,选择“表单”,单击“新建文件”。
(2)单击确定后弹出表单设计器界面。
(3)在“表单设计器”中按照题目要求添加控件:
这里想要计算的结果只显示不能修改只需要将对应文本框的Enable属性改成F即可。
(4)给求解按钮和退出按钮分别编写对应的Click事件:
a=thisform.text1.value
b=thisform.text2.value
c=thisform.text3.value
a=val(a)
b=val(b)
c=val(c)
x1=(-b+sqrt(b^2-4*a*c))/(2*a)
x2=(-b-sqrt(b^2-4*a*c))/(2*a)
thisform.text4.value=x1
thisform.text5.value=x2
thisform.release
(5)保存表单,进行测试:
三、利用表单向导建立单表表单
Visual FoxPro中建立表单最便捷的方法是利用系统提供的表单向导,但表单向导创建的表单只能是数据表表单,即对数据表进行操作的窗口。
(1)执行Visual FoxPro系统窗口中的“文件”菜单下的“新建”命令,将出现“新建”对话框。在新建文件类型对话框中选择“表单”,再单击“向导”按钮,将弹出“向导选取”对话框。
(2)在“向导选取”对话框中选择“表单向导”,然后单击“确定”按钮,将会出现表单向导“步骤1—字段选取”对话框。
(3)在“字段选取”对话框的“数据库和表”列表框中选择需要处理的数据表(例如STUDENT),然后将“可用字段”列表框中出现的部分或全部字段添加到“选择字段”框中。单击“下一步”按钮,进入表单向导“步骤2—选择表单样式”对话框。
(4)在“选择表单样式”对话框中的“样式”列表框中选择“标准式”表单样式,在“按钮类型”列表框中选择表单中的按钮样式,例如“文本按钮”,然后单击“下一步”按钮,进入表单向导“步骤3—排列次序”对话框。
(5)在“排列次序”对话框中的“可用字段或索引标识”列表框中选择“学号”字段作为记录的排序依据,然后单击“下一步”按钮,进入表单向导“步骤4—完成”对话框。
(6)在“完成”对话框中的“请输入表单标题”文本框中输入表单的标题文字“STUDENT”,然后选择表单的保存方式,如“保存并运行表单”,单击“完成”按钮,将出现“保存”对话框,输入表单的文件名“STUDENT”,单击“保存”按钮,将运行设计的表单。
注意:由表单向导建立的表单,可以通过表单设计器对其已有的对象进行修改,同时也可以向表单中添加新对象。
四、数据环境的设置与应用
借助于Visual FoxPro数据环境,设计用于对“rsgl.dbc”数据库中的“员工.DBF”表进行操作的表单。
若希望通过表单控件来显示和修改数据表中的字段数据,通常的方法是设置这些控件的数据源属性ControlSource,以实现数据的绑定。但最简单的方法是在已经建立起表单数据环境的情况下,直接从“数据环境设计器”窗口中将字段、表或视图拖到表单中,系统将自动产生相应的控件并建立起与表、字段等数据源的绑定,自动设置其ControlSource属性。
(1)建立表单中用于显示和编辑数据记录的控件对象
在“表单设计器”窗口中,首先打开rsgl.dbc数据库,然后执行系统“显示”菜单下的“数据环境”命令,将弹出的“添加表或视图”对话框,然后在对话框中将数据库中的“员工”表添加到数据环境窗口中。
(2)单击“关闭”按钮,将出现“数据环境设计器”窗口,在“员工”字段列表窗口中的上单击并将其拖动到表单窗口中,然后调整各个对象的位置。
(3)建立数据记录操作的命令按钮组
①在“表单控件”工具栏上单击“命令按钮组”控件按钮,向表单中添加一个按钮组控件对象,然后在“命令按钮组”控件对象上单击鼠标的右键,并在弹出的快捷菜单中选择“生成器”,将打开“命令组生成器”窗口。
②切换至“按钮”选项卡,将“按钮的数目”微调框中的值设置为5,然后依次在标题列中设置按钮组中每个按钮的标题,即各个按钮Caption属性的属性值。
③切换至“布局”选项卡,从布局选项卡中设置按钮的布局,如按钮组是“垂直”或“水平”放置、按钮之间的间隔等。
(4)在事件过程代码编辑窗口中,编写命令按钮组CommandGroup1的Click事件代码如下:
DO CASE
CASE THIS.VALUE=1&&单击“第一个”按钮执行的代码
GO TOP
THIS.COMMAND1.ENABLED=.F.&&第1个按钮无效
THIS.COMMAND2.ENABLED=.F.&&第2个按钮无效
THIS.COMMAND3.ENABLED=.T.&&第3个按钮有效
THIS.COMMAND4.ENABLED=.T.&&第1个按钮有效
CASE THIS.VALUE=2&&单击“上一个”按钮执行的代码
SKIP -1&&上移一条记录
IF !BOF()&&若记录指针没有移动到表头
THIS.COMMAND1.ENABLED=.T.&&第1个按钮有效
THIS.COMMAND2.ENABLED=.T.&&第2个按钮有效
ELSE
SKIP 1&&下移一条记录
THIS.COMMAND1.ENABLED=.F.&&第1个按钮无效
THIS.COMMAND2.ENABLED=.F.&&第2个按钮无效
ENDIF
THIS.COMMAND3.ENABLED=.T.&&第3个按钮有效
THIS.COMMAND4.ENABLED=.T.&&第4个按钮有效
THISFORM.REFRESH
CASE THIS.VALUE=3&&单击“下一个”按钮执行的代码
SKIP 1&&下移一条记录
IF !EOF()&&若记录指针没有移动到表尾
THIS.COMMAND3.ENABLED=.T.&&第3个按钮有效
THIS.COMMAND4.ENABLED=.T.&&第4个按钮有效
ELSE
SKIP -1&&上移一条记录
THIS.COMMAND3.ENABLED=.F.&&第3个按钮无效
THIS.COMMAND4.ENABLED=.F.&&第4个按钮无效
ENDIF
THIS.COMMAND1.ENABLED=.T.&&第1个按钮有效
THIS.COMMAND2.ENABLED=.T.&&第2个按钮有效
THISFORM.REFRESH
CASE THIS.VALUE=4&&单击“最后一个”按钮执行的代码
GO BOTTOM
THIS.COMMAND3.ENABLED=.F.&&第3个按钮无效
THIS.COMMAND4.ENABLED=.F.&&第4个按钮无效
THIS.COMMAND1.ENABLED=.T.&&第1个按钮有效
THIS.COMMAND2.ENABLED=.T.&&第2个按钮有效
THISFORM.REFRESH&&刷新表单,显示新纪录
CASE THIS.VALUE=5&&单击“退出”按钮执行的代码
THISFORM.RELEASE
ENDCASE
THISFORM.REFRESH
运行结果为:
用于显示字段数据的各个对象的ControlSourse属性为员工.对应字段
Name属性的属性值为:
思考与练习
5.实现员工表中的记录逐条显示
(1)按照题目要求将表单的基本布局填充设置完整:
(2)设置命令组按钮的上一条和下一条的Click事件:
DO CASE
CASE THIS.VALUE=1&&“上一条”按钮执行的代码
SKIP -1
IF !BOF()
THIS.COMMAND1.ENABLED=.T.&&未到达表头则“上一条”按钮可以使用
ELSE
SKIP 1
THIS.COMMAND1.ENABLED=.F.&&到达表头则“上一条”按钮不能使用
ENDIF
THIS.COMMAND2.ENABLED=.T.
THISFORM.REFRESH
CASE THIS.VALUE=2&&“下一条”按钮执行的代码
SKIP 1
IF !EOF()
THIS.COMMAND2.ENABLED=.T.&&未到达表尾则“下一条”按钮可以使用
ELSE
SKIP -1
THIS.COMMAND2.ENABLED=.F.&&到达表尾则“下一条”按钮不能使用
ENDIF
THIS.COMMAND1.ENABLED=.T.
THISFORM.REFRESH
ENDCASE
THISFORM.REFRESH