主题:请教一个列表框问题
xm7050432
[专家分:180] 发布于 2011-01-26 10:33:00
我做了一个文本框和一个列表框,通过文本框输入字母可以对列表框里的表进行筛选,比如我在文本框输入BJ,列表框就会自动显示北京,北极等。但是我现在还要在列表框上单击或者通过键盘的上下移动来实现读取值。我想问要怎么做才能实现:当列表的框值是唯一的时候,自动赋值给文本框,不用再选择。比如当我输入BJ00的时候列表框显示的值就是北京了,怎么让文本框的值直接显示北京?
回复列表 (共5个回复)
沙发
妙计山人 [专家分:130] 发布于 2011-01-26 13:13:00
在GotFocus()中输入下述代码:
ThisForm.Textbox1.Value=ALLTRIM(列表框.名称)
ThisForm.Textbox1.Refresh
板凳
xm7050432 [专家分:180] 发布于 2011-01-26 15:40:00
[quote]在GotFocus()中输入下述代码:
ThisForm.Textbox1.Value=ALLTRIM(列表框.名称)
ThisForm.Textbox1.Refresh[/quote]
意思是在list的gotfocus()加入上面的代码是吗,这样我还是要把焦点移动list上,和我现在通过TAB或者按小键盘上的方向键是一样的,我的意思是当我在文本框输入完代码如BJ00后,list的结果只有一个北京的时候,焦点就不用再移到list上了,文本的值直接显示北京,然后焦点移动下个文本框去。 我觉得问题的关键应该是怎么判断list筛选的结果只有一条。这个语句我不会。
3 楼
xm7050432 [专家分:180] 发布于 2011-01-26 16:53:00
thisform.list1.Visible= .T.
cFilter=ALLTRIM(Thisform.客户1.Value)
SELECT Custom
IF !EMPTY(cFilter)
SET FILTER TO OCCURS(UPPER(cFilter),CUSTOM.客户代码)>0 &&筛选包含当前输入拼音的记录
IF RECCOUNT()==1 ****问题应该是出在这里
thisform.客户1.Value=This.List(This.ListIndex)
thisform.list1.Visible= .F.
thisform.客户1.REFRESH
endif
Thisform.List1.Requery &&重新查询数据源
ELSE
SET FILTER TO &&当前输入为空时清除筛选条件
Thisform.List1.Requery
ENDIF
4 楼
妙计山人 [专家分:130] 发布于 2011-01-27 17:06:00
不妨在你的相关表中增加一个“BM”字段,使得“BJ”同“北京”保持对应关系。
SELECT Custom
Set Filter To Allt(Bm)=Allt(ThisForm.Textbox1.Value)
Thisform.List1.Refresh
5 楼
moz [专家分:37620] 发布于 2011-01-27 17:12:00
直接跳过,可以使它的tabstop为假
虽然在你自己看来,效率非常高。
只是我需要提醒你,如果程序不仅仅是你自己在用的话,建议别搞那么“智能”的东西。
普通人不需要的。
他们也许会习惯了宁愿按多一次回车键,
也许需要确认多一次结果。
我来回复