Visual FoxPro编程技巧(三)

Author: 李雄文 Date: 1998年 第28期 13版

#1  1.巧设Listbox属性
  留意VFP本身的联机帮助了吗?当选择索引方式查看帮助时,只要在查找文本框内输入一两个字符或汉字,列表框会自动查出以此字符或汉字开头的相应主题供你选择。在你的程序中也可应用这种技术:
  在表单上布置一个文本框text1,一个列表框list1,设置list1的RowSourceType为6(字段),RowSource为table1.名称(table1为一表名,“名称”为该表中一字段名),在text1的InteractiveChange事件中加入以下代码:
  loca for likec(allt(This.Value)+
″*″,table1.名称)
  Thisform.list1.Value=table1.名称
#1  2.一对多表单中新增子表数据
  一对多表单(或称父/子表单,主/细表单)是VFP最重要的录入工具之一。子表的数据通常是利用Grid控件录入。理论上讲只需将Grid的AllowAddNew属性设置为.t.即可录入新的子表数据,但实际中发现这并不十分可取:“下移”光标键(DNARROW)既是记录移动的控制键,又是记录新增的控制键,而最关键的问题则是,当子表中没有与父表中连接字符相符合的记录时,利用DNARROW根本无法在Grid中输入数据。以下提供一个可行方案:
  将Grid的AllowAddNew属性设为.F.,让DNARROW键专司“记录移动”之职;让CTRL(控制键)与DNARROW键的组合来实现新增记录的控制;
  将form的KeyPreview属性设为.T.,以让form拦截CTRL+DNARROW组合键;
  在form的KeyPress事件中加入如下代码:
  do case
  case nkeycode=145 &&CTRL+DNARROW
  insert into 子表(连接字段) values (父表.连接字段)
  Thisform.Refresh
  endcase
  注意上述insert sq1语句的作用:它可以在子表中保持数据的引用完整性。如果使用append blank语句,后面还应加上一句rep1子表.连接字段with父表.连接字段。
#1  3.一对多表单中删除子表数据
  参照上则技巧,将CTRL+DEL组合键作为删除控制键,在上述endcase语句之前再加入一个case分支:
  case nkeycode=147 &&CTRL+DEL
  sele 子表
  if MessageBox(″是否删除本记录?″,1+32+0,″请确认″)=1
  set deleted on
  dele
  Thisform.Grid1.SetFocus
  endif
  建议将Grid的DeleteMark及RecordMark属性设置为.F.,将ScrollBars属性设置为2(只显示垂直方向的滚动条,如果子表字段不多则更应如此),这样会显著增加Grid的有效使用面积,而视觉感受也会舒服许多。
#1  4.用Spinner实施数据检验
  尽管可以用数据库容器的字段级规则来检验数据合法性,但许多程序员还是愿意将字段检验功能放到表单中。如果是这样的话,对于数值型字段来讲,最好的选择就是使用Spinner控件,它提供了极简便的合法性检验手段。现在假定有一数值型字段,其数值范围必须在0和5000之间,则可将一Spinner控件与其绑定,且设置该控件的相关属性如下:
with Spin1
  .KeyboardHighValue=5000
  .KeyboardLowValue=0
  .SpinnerHighValue=5000
  .SpinnerLowValue=0
endwith
  若输入超出设定的范围,系统会自动提示出错信息,光标也无法离开Spinner,可见用Spinner作合法性检查方便而高效。