我提的问题焦点是:能否让键盘上的上下箭头键对表单上的列表框起作用的情况下,而表单上的文本框一直保持光标不离开可随时输入字母。
我设计的表单上的列表框RowSourcetype是:6-字段,RowSource是:商品名.名称,拼音简码,在表单上的文本框(用于显示商品名)中先输入拼音简码时就触发interactivechange事件,在该事件中执行set filter this.value$商品名.拼音简码命令,列表框即显示相应一大批商品名,这时根据列表框显示内容的情况,有时还需在文本框中继续输入字母以缩小列表框的显示范围,而有时可直接按键盘上的上下箭头键移动列表框上的选择行到所需的商品名,这时按键盘上的回车键,商品名则进入文本框。问题是:如何让文本框保持光标不离开可随时输入字母的情况下,又能按键盘上的上下箭头键移动列表框的选择行。
--设你的表单上的这个文本框和列表框分别为: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
我设计的表单上的列表框RowSourcetype是:6-字段,RowSource是:商品名.名称,拼音简码,在表单上的文本框(用于显示商品名)中先输入拼音简码时就触发interactivechange事件,在该事件中执行set filter this.value$商品名.拼音简码命令,列表框即显示相应一大批商品名,这时根据列表框显示内容的情况,有时还需在文本框中继续输入字母以缩小列表框的显示范围,而有时可直接按键盘上的上下箭头键移动列表框上的选择行到所需的商品名,这时按键盘上的回车键,商品名则进入文本框。问题是:如何让文本框保持光标不离开可随时输入字母的情况下,又能按键盘上的上下箭头键移动列表框的选择行。
--设你的表单上的这个文本框和列表框分别为: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
楼主自己研究吧,完全符合你的要求。
坚守VFP最后的阵地