这一课我们用上一课讲的一些控件来对前面的人事管理软件进行改进,使其更易用,更不容易出错,最主要当然是为了进一步说明这些控件的用法。
先讲第一个改进,用选项按钮来选择性别
在新增和修改人事档案的表单中,本来性别是要输入的,虽然只能输入“.t.”或“.f.”,倒是不会出现输入其它字符的错误,但是很不直观,所以我们用选项按钮来改进。
(1)、将表单上输入性别的文本框换为选项按钮组 ,选项按钮组做好后隐含两个按钮,这里正好我们需要两个,因为性别就两种(大概不会有第三种)。
但是按钮隐含的排列是上下排列,这样很占地方,我们将其调整为水平排列,方法是:先把选项按钮组拉的比较大,使两个按钮都能看见,暂时将别的控件盖住也不要紧。然后在属性窗口中选择optiongroup1下面的option2,然后将其放到与option1水平排列的地方,如不能精确调整它的位置,看一下初级教程第七课中的精确调整对象位置。
接着设置标题,将option1的caption设为“男”,option2该设为......,设好如 。
将optiongroup1的controlsource设为xb,为什么要这样,直接设为“性别”字段不行吗?不行!因为性别字段的值是逻辑型,而optiongroup1的值为数值型,因此要用一个数值型的变量来接收optiongroup1的选择值,然后用适当方法将其变换为逻辑型存入数据表。具体方法下面会讲。
(2)、设置xb的初始值,进入“编辑人员”(bjry)表单的修改,在其 load 事件中输入如下代码:
public xb if 性别 xb=1 else xb=2 endif |
在这里先将xb设为公共变量,因为 load 事件程序是一个子程序,当这个程序运行完毕,其中所有的私有变量(即在本程序中创建的变量)都将释放,之后就再也找不到这个变量了,但这个变量在其它地方又要用,故将其设为公共变量
注意 |
这段代码不能放在 init 事件中,这是因为表单的 init 事件是在所有控件的 init 事件发生之后,而当控件的 init 事件发生时,即初始化时,就需要这个变量,而这时还没有,所以会发生找不到变量的错误,而 load 事件则是发生在所有事件之前,即表单启动的时候。 |
然后根据当前记录的性别字段设置xb的值,如果是“真”就设为1,即“男”,否则为2,即“女”,这样进入表单后选项按钮的黑点就会根据xb的值来显示。
注:在需要逻辑表达式作判断时,如果是逻辑变量,因为其本身就是一个逻辑表达式,为“真”的话就直接写这个变量名,为假的话就写为“.not. 变量名”,而不要写成“变量名=.t.”或“变量名=.f.”
(3)、将“新增”按钮的click事件程序改为如下:
*根据选项按钮所做的选择,将相应的值存入性别字段 if xb=1 replace 性别 with .t. else replace 性别 with .f. endif append blank &&增加一条空记录 xb=1 &&将xb设为1 *这是一个新记录,还不知道是男或女,因此一律设为1,即“男”,作为初始值 thisform.text1.refresh &&将text1的内容刷新,下同 thisform.optiongroup1.refresh thisform.text2.refresh thisform.text4.refresh thisform.text5.refresh thisform.text6.refresh thisform.text7.refresh thisform.text8.refresh thisform.edit1.refresh thisform.text1.setfocus &&将焦点设到text1 |
仔细看看与以前有什么不同
(4)、将“上一条”按钮的click事件程序改为如下:
skip -1 &&记录指针向上跳一行 *以下一段程序检测记录指针是否到了开头,如果是给出提示,并把指针定位到第一个记录 if bof() &&假如指针已到开头 wait @#已到开头@# window nowait &&在右上角显示的提示,鼠标或键盘一动提示消失 go top &&将指针定位到第一个记录 endif &&假设结束 *根据当前记录的性别字段设置xb的值,如果是“真”就设为1,否则为2 *在需要逻辑表达式作判断时,如果是逻辑变量,因为其本身就是一个逻辑表达式, *为“真”的话就直接写这个变量名,为假的话就写为“.not. 变量名”, *而不要写成“变量名=.t.”或“变量名=.f.” if 性别 xb=1 else xb=2 endif thisform.text1.refresh &&将text1的内容刷新,下同 thisform.optiongroup1.refresh thisform.text2.refresh thisform.text4.refresh thisform.text5.refresh thisform.text6.refresh thisform.text7.refresh thisform.text8.refresh thisform.edit1.refresh thisform.text1.setfocus &&将焦点设到text1 |
“下一条”按钮也做相应改动,看看自己会不会做。
(5)、将“退出”按钮的click事件程序改为如下:
*根据选项按钮组所做的选择,将相应的值存入性别字段 if xb=1 replace 性别 with .t. else replace 性别 with .f. endif thisform.release &&本表单释放 |
OK了!