Visual FoxPro编程技巧(三) 李雄文 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作合法性检查方便而高效。