combox(组合框)的问题?

calin3333 2011-04-12 09:03:50
一个组合框用于姓名字段,由于人数较多,设 STYLE = 0

我想达到这样一个效果:输入一个姓;比如“张”,接着点击,在下拉列表中仅出现全部姓“张”的人员,选择合适的人员

后,定位到此人员的当前记录,进行后续操作。

试了多次没有成功,不知从何下手。

不知能不能做到?该怎么做?

谢谢!
...全文
151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2011-04-13
  • 打赏
  • 举报
回复
把以下代码加到你的 组合框的 InteractiveChange 事件中

If !Empty(This.DisplayValue)
Select 姓名 Into Cursor T1 From 你的表名 Where Alltrim(This.DisplayValue)$姓名
If _Tally>0
This.RowSourceType= 6
This.RowSource='T1.姓名'
This.SetFocus
Keyboard '{F4}'
Else
Messagebox("没有你要查询的数据",48,"信息提示")
This.Clear
Endif
Endif
十豆三 2011-04-12
  • 打赏
  • 举报
回复
Text+List查询

--设表单上的这个文本框和列表框分别为:Text1和List1

1、
--表单Init事件代码:
This.KeyPreview=.T.
This.List1.Visible=.F.

2、
--表单KeyPress事件代码:
Lparameters nKeyCode, nShiftAltCtrl
If (nKeyCode=5 Or nKeyCode=24 Or nKeyCode=13) And This.List1.Visible And This.List1.ListItemId>0 And This.Text1.Tag='1'
If nKeyCode=13
This.Text1.Value=This.List1.Value
This.List1.Visible=.F.
Else
lnListID=Iif(nKeyCode=5,Max(This.list1.ListItemId-1,1),Min(This.list1.ListItemId+1,This.list1.ListCount))
This.list1.ListItemId=lnListID
Nodefault
Endif
Endif

3、
--Text1的GotFocus事件代码:
This.Tag='1'

--Text1的LostFocus事件代码:
*Thisform.List1.Visible=.F.
This.Tag=''

--Text1的InteractiveChange事件代码:
If !Empty(This.Value)
Thisform.list1.RowSource=Null
Select 名称 From 商品名 Where Alltrim(This.Value)$拼音简码 Into Cursor t1 Order By 名称
Thisform.list1.RowSourceType=6
Thisform.list1.RowSource="t1.名称"
If Reccount('t1')>0
Thisform.List1.ListItemId=1
Thisform.List1.Visible=.T.
Else
Thisform.List1.Visible=.F.
Endif
Else
Thisform.List1.Visible=.F.
Endif

--List1 的Click事件代码:
Thisform.Text1.Value=This.List1.Value
This.Visible=.F.

*-----------------------------------------------
ComboBox组合框查询
by:cbl518

PUBLIC A0[1]
if lenc(trim(thisform.combo1.text))=1
with thisform.combo1
SELECT 姓名 FROM 你的数据源表 WHERE ATCC(.text,姓名)=1 INTO ARRAY A0
if !empt(A0)
.RowSource="A0"
.RowSourceType= 5
.SetFocus
KEYBOARD '{F4}'
else
MESSAGEBOX("没有你要查询的数据",64,"温馨提示")
endif
endwith
endif


1 把以上代码添加组合框的: InteractiveChange 事件中!

2 你的数据源必须来自于一个数据表!,并将表名和字段名替换正确!

3 你的组合框控件对象引用,一定替换正确!


*-----------------------------------------------
Combobox下拉框自动筛选(如在Google中输入字符)
*--------------------------------------------
By:js_szy
注:未测试

在列表框combo 的 keypress中加如下代码:

If nkeycode>0
If nkeycode=127 &&退格
If Asc(Right(Input_value,1)) <128 &&删除非汉字
Input_value=Left(Input_value,Len(Input_value)-1)
Else &&删除汉字
Input_value=Left(Input_value,Len(Input_value)-2)
Endif
Else
If nkeycode <>160 &&按的不是Alt+↓键
Input_value=Input_value+Chr(nkeycode) &&保存输入内容
Endif
Endif
Sele 表名
Set Filt To Alltrim(Input_value) $ 字段名称
Count To num
If num=0 Then
Set Filt To
Input_value=''
This.Value=''
Endif
Thisform.Combo.Requery
Keyboard '{F4}'
Endif
十豆三 2011-04-12
  • 打赏
  • 举报
回复
InteractiveChange 事件:在使用键盘或鼠标更改控件的值时,此事件发生。

DropDown 事件:单击组合框控件中的下箭头后,列表部分即将下拉时此事件发生。

没有先后,因为触发不同。
calin3333 2011-04-12
  • 打赏
  • 举报
回复
INERTACTIVECHANGE
DropDown

这两个事件哪个先发生?

如果这两个事件都能完成此操作,写在哪个事件里比较好?

谢谢!
calin3333 2011-04-12
  • 打赏
  • 举报
回复
谢谢楼上两位!
wwwwb 2011-04-12
  • 打赏
  • 举报
回复
在COMBO1的INERTACTIVECHANGE
SET FILTER TO ALLTRIM(姓名) = cname
this.Requery

RowSourceType 选: 6
RowSource 填: temp.姓名

FORM INIT:
PUBLIC cname
都市夜猫 2011-04-12
  • 打赏
  • 举报
回复
RowSourceType 选: 6 - 字段
RowSource 填: temp.姓名

DropDown 事件中:
This.Value 改为 This.DisplayValue
最后加一句:This.Requery()
calin3333 2011-04-12
  • 打赏
  • 举报
回复
一个组合框用于姓名字段,由于人数较多,设 STYLE = 0

我想达到这样一个效果:输入一个姓;比如“张”,接着点击,在下拉列表中仅出现全部姓“张”的人员,选

择合适的人员后,定位到此人员的当前记录,进行后续操作。

如果在运行时刻变换combox的数据源应该写在那个事件中?是清空列表内容还是刷新,还是清空后刷新同时执

行,写在哪个事件?
calin3333 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]
你做到哪一步了?
上传你的表单、DBF到www.access911.net/csdn
,用WINRAR压缩
[/Quote]

文件已上传,谢谢!
wwwwb 2011-04-12
  • 打赏
  • 举报
回复
你做到哪一步了?
上传你的表单、DBF到www.access911.net/csdn
,用WINRAR压缩
calin3333 2011-04-12
  • 打赏
  • 举报
回复
ComboBox组合框查询
by:cbl518

PUBLIC A0[1]
if lenc(trim(thisform.combo1.text))=1
with thisform.combo1
SELECT 姓名 FROM 你的数据源表 WHERE ATCC(.text,姓名)=1 INTO ARRAY A0
if !empt(A0)
.RowSource="A0"
.RowSourceType= 5
.SetFocus
KEYBOARD '{F4}'
else
MESSAGEBOX("没有你要查询的数据",64,"温馨提示")
endif
endwith
endif


1 把以上代码添加组合框的: InteractiveChange 事件中!

2 你的数据源必须来自于一个数据表!,并将表名和字段名替换正确!

3 你的组合框控件对象引用,一定替换正确!

*************************************************************************

以上这段经测试,只要输入一个字,即报 "没有你要查询的数据" 表中明明有此姓啊?

还请赐教! 谢谢!

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧