|
这一课讲用组合框选择输入部门和职务。之所以要用选择输入,是因为对于同一值不同人在不同时候输入是不一样的,比如“人事部门”,有人可能会输入成“人事部”,再加上无意识的输入错误,使得一个部门会有好几种说法,这将给查询、统计等带来很大问题,因此我们对于一个其内容只有有限个选择的字段的输入,最好采用选择输入。 从我们前面所讲过的控件中可以看出,复选框、选项按钮组、列表框、组合框都可以用作选择输入,那么时候该用哪一个控件呢?一般原则是: 1、对于具有“是”、“否”两种选择的,用复选框; 2、选项是固定的,并且选项不太多,可以用选项按钮组; 3、对于选项是可变的,并且选项不是非常多,可用列表框; 4、对于选项是可变的,并且选项非常多,可用组合框,因为选项非常多的情况下,用列表框找起来是很麻烦的,而组合框可以直接输入,只是在必要的时候才查一下。另外如果不希望该输入控件占太多地方,也可用组合框,因为它平时只占一行,拉下时才显示框,而列表框始终要占一块位置,当然您高兴也可以让列表框只占一行,但那样操作起来一定别扭。 要实现选择输入,就要将可选择的项目事先准备好,对于选项来说有两种情况,一种是固定的、一种是可变的。比如性别就是固定的,而部门就可能是不固定的,因为一个单位随时可以增减部门。 固定的选项可以在编程时编好,而不固定的一般就要有个数据表来存放选项,而且这个表可由使用的人任意增删和修改,下面我们就来讲讲怎样实现这种功能。 - 在人事档案数据库中建立一个数据表,就一个字段,字段名为“部门”;
- 在菜单中加一项“维护”,下面有一个子菜单项“部门字典”使用的命令是:
do form bmzd name bmzd - 建立一个表单,界面如 图1 ;
- 在“新增”按钮的click事件中写入如下程序:
if this.caption='新增' &&假如本按钮的标题为“新增”,表示第一次新增 this.caption='继续新增' &&将本按钮标题设为“继续新增” endif &&结束假设
select bmzd &&选择部门表 append blank &&加一空记录
thisform.grid1.readonly=.f. &&将表格设为非只读,即可以修改
thisform.grid1.refresh &&表格刷新 thisform.grid1.setfocus &&将焦点放到表格上以利于输入
|
- 在“修改”按钮的click事件中写入如下程序:
if this.caption='修改' &&如果本控件的标题是“修改” this.caption="结束修改" &&将本控件的标题设为“结束修改” thisform.grid1.readonly=.f. &&将表格设为非只读,即可以修改 else &&否则 this.caption="修改" &&将本控件的标题设为“修改” thisform.grid1.readonly=.t. &&将表格设为非只读,即可以修改 endif
thisform.grid1.refresh &&表格刷新 thisform.grid1.setfocus &&将焦点放在表格上 |
- 在“删除”按钮的click事件中写入如下程序:
select bmzd &&选择部门字典 *虽说目前肯定是bmzd表,不用选也可以,但这是为了防止以后程序做了某种改动, *造成当前表不是bmzd而使程序出错,这样就万无一失了。 delete &&删除当前记录
thisform.grid1.refresh &&表格刷新 thisform.grid1.setfocus &&将焦点放在表格上 |
- 在“恢复”按钮的click事件中写入如下程序:
select bmzd &&选择部门字典 *虽说目前肯定是bmzd表,不用选也可以,但这是为了防止以后程序做了某种改动, *造成当前表不是bmzd而使程序出错,这样就万无一失了。 recall &&恢复当前记录
thisform.grid1.refresh &&表格刷新 thisform.grid1.setfocus &&将焦点放在表格上 |
- 在“退出”按钮的click事件中写入如下程序:
select bmzd &&选择部门表 locate for delete() &&查找是否有做了删除标记的记录 if found() &&假如找到 pack &&将做删除标记的记录彻底删除 endif &&结束假设
thisform.release &&关闭本表单 |
- 在表格下的column1下的text1控件的lostfocus事件中写入如下程序:
*当处于新增状态时,即command1的标题为“继续新增”, *一旦光标离开本格,表示新增结束,就将表格设为只读, *同时将标题设回“新增” if thisform.command1.caption='继续新增' thisform.grid1.readonly=.t. thisform.command1.caption='新增' endif |
- 存盘退出
这样用于输入和维护部门选项的子功能就做好了。 下面在编辑人员的表单中设置一组合框用于输入部门: - 将原来用于输入部门的文本框删除;
- 换上一组合框,如 图2 ;
- 将组合框的controlsource设为“rsda.部门”;
- 将rowsourcetype设为“6-字段”;
- 将rowsource设为“bmzd.部门”;
- 重新设置所有控件的tabindex,设置方法在的第九条“设置控件的tabindex位置”中有讲解。
- 将菜单的初始化代码改为如下:
set talk off &&关闭命令响应 set safety off &&当覆盖磁盘上的文件时不提示,当程序编好后,不会错误覆盖文件 set date ansi &&设置日期为“年.月.日”方式 set century on &&设置年为4位数表示 set default to d:\soft\jfzcc\mcc\mcc2\rsgl2 &&设置软件所在目录,应根据您的目录做适当修改 use rsda &&打开人事档案数据表 select 0 &&选一空工作区(新增语句) use bmzd &&打开部门表(新增语句)
dkda=.f. &&设置一变量用于检测档案是否打开,真为打开,假为关闭 |
至此用选择输入部门的功能就编好了,用同样方法,我们可以编出用选择输入职务的功能,这做为本课的练习,大家自己做一做。
|