为FoxPro中的弹出式菜单增加自学习功能

为FoxPro中的弹出式菜单增加自学习功能,第1张

为FoxPro中的弹出式菜单增加自学习功能,第2张

开发过应用系统的人都知道,在使用FoxPro for Win-dows用screen generator设计数据窗口的过程中,经常使用弹出菜单来设计数据输入的数据输入端口。通常,弹出菜单只会在屏幕上显示一个选项的内容。当你用鼠标选中它或按空白键和回车键时,会出现一个窗口和一些选项供用户选择。使用弹出菜单有两个好处:一个好处是用户可以从弹出项提供的可用选项中选择一个,而不是在数据录入中输入数据;使用弹出菜单的另一个好处是可以保证数据输入的有效性。因为用户只能从弹出菜单中选择数据,所以不会出现输入错误。但是在开发软件的过程中,我们发现弹出菜单有一个缺点:当弹出菜单选项不包含用户想要输入的数据时,系统无法让用户输入正确的数据。本文所述的方法(以FoxPro 2.5 for Windows为例)就是改善弹出菜单的这一缺点,增加允许用户向弹出菜单输入数据的功能,将用户输入的数据自动添加到弹出菜单的选项中(也就是我们所说的自学习功能),以便用户在以后输入数据时选择使用。

实现效果

我们可以在数据窗口中定义一个数据条目作为弹出菜单,在弹出菜单的相同位置定义一个输入字段。该字段与弹出菜单大小相同,其初始状态为初始禁用字段,完全被弹出菜单覆盖。第一次使用弹出菜单时,弹出选项中只出现“其他”。如果用户在录入数据时发现要录入的数据没有包含在弹出的菜单选项中,可以选择“其他”。此时,在数据窗口中弹出菜单的位置会出现一个输入字段,该输入字段可以完全覆盖弹出菜单,因此用户可以在该输入字段中输入新的数据。输入完成后,输入栏将再次被弹出菜单覆盖,屏幕上的弹出菜单将显示为新输入的内容。每次用户在这个输入栏中输入新的数据(在原来的弹出菜单中一定找不到),它都会作为一个新的选项添加到弹出菜单中,选项中的“其他”项永远是最后一项。

实现方法

我们假设为数据库ab.dbf定义了一个数据窗口ab.scx,数据库ab.dbf中有一个字符字段aa,在数据窗口ab.scx中,aa字段对应的数据录入变量m.aa被定义为一个弹出菜单,其数组POPUP的名称为aalist。另外,为弹出菜单定义一个对应的输入字段,其字段名为m.newaa。

(1)定义数据窗口ab.scx,选择屏幕/布局,输入屏幕代码,并在
屏幕设置代码中输入以下程序段:

& &这个程序段的作用是初始化并生成数组aalist
Private M. Popup Edit,M. Savrec, m . aacnt
m . popup edit = . f .
m . aacnt = 0
DIMENSION aa list[1]
m . sav rec = RECNO()
GO
Scan for not deleted()
m.string = all trim(aa)& &如果不为空(m . string)并且ascan(aa list
m . string)= 0
,则获取字段内容
= m.string & & &将字段内容添加到数组aa list
endif
ends can
Dimension aa list[m . aa CNT]
= asort(aa list)& & Sort数组aa list
m . aa CNT = m . aa CNT+1
Dimension aa list[m . aa CNT]
aa list[m . aa CNT]= " other " & &将“其他”项添加到最后一项

(2)在数据窗口ab.scx中定义一个弹出菜单,进入弹出对话框,将该对话框的Variab le列定义为M.aa,在option列中选择Array Popup,在该列中输入数组名aalist。在条款列中选择Va lid,然后输入以下过程:

& &该程序段的功能是激活输入字段m . newaa
IF m . aa = " other "
m . popup edit =。t .
show get m . newaa enable
_ curobj =

(3)在数据窗口ab.scx中与弹出菜单相同的位置定义一个输入字段,并调整这个字段的大小,使其能够完全覆盖弹出菜单。进入字段对话框后,在字段列中选择输入字段(get ),初始禁用字段,在选项列中选择输入字段,在输入列中输入m.newaa。在子句列中选择有效项,然后输入以下程序段:

如果empty (m.newaa) orascan (aalist,m . newaa)< > 0
return . t .
endif & & m . newaa是空或者已经存在于aalist中,那么
= ains(m . aacnt)
aalist[m . aacnt]= all trim(m . newaa)& &在aa list中插入一个新元素,其内容为m.newaa
= ASORT(aalist)“other”项被附加到数组aalist的末尾
用alltrim (m. newaa)替换aa &修改数据库中的字段
m . newaa = " "
m . popup edit =。f.
show get m. newaa disable [

(4)在数据窗口ab.scx中,选择屏幕/对象顺序,进入对象顺序屏幕。在此屏幕中,调整弹出菜单m.aa和输入字段m.newaa的顺序,使m.aa排列在m.newaa之前,并且在显示屏幕时m.aa可以覆盖m.newaa。这样在输入过程中,先输入m.aa,当用户在m.aa中选择“其他”项时,会显示输入字段m.newaa供用户输入新数据。

(5)在定义输入字段m.newaa的过程中,需要在valid item in子句列的程序段中添加一些关于数据有效性验证的命令,以保证输入的数据正确有效。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 为FoxPro中的弹出式菜单增加自学习功能

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情