如何做一个类似帮助索引的东东?(100分)

  • 主题发起人 主题发起人 ningliu
  • 开始时间 开始时间
N

ningliu

Unregistered / Unconfirmed
GUEST, unregistred user!
本人作了一个选择的东东,下面是一个列表,上面是一个编辑框,列表中的数据
来自数据库,选中列表中的一项,编辑框是相应的数据.现在要加一个类似帮助中
索引的模糊查询功能,就是说在编辑框中输入过程中,列表同时变动,选中最为接
近的项.如何做呢?
 
很简单呀.
如果用listbox更简单了. (我做了个类似的combobox控件(下拉list是个stringgrid). 支持每键索引).
var
l, i: Integer;
begin
listbox.itemindex := -1;
l := length(edit.text);
for i := 0 to listbox.items.count - 1 do
if copy(listbox.items, 1, l)=length(edit.text)) then // 匹配
begin
listbox.itemindex := i;
edit.text := listbox.items;
edit.selstart := l; // 设置光标位置
edit.sellength := length(listbox.items)-l; // 光标以后的内容全选(反色显示)
exit;
end;
end;
 
如果输入的是中文好像就不灵了. :-(
 
中文也一样. 我试过, 挺正常.
顺便说一句, 我是在edit.onchange中写上述代码的
 
eyes: 我也曾经写过类似的代码,当时我记得好像因为输入一个中文汉字,发生
2次change事件,结果无法实现. 可能是我没整对. :-)
 
如果我用DBLookupListBox,怎么办呢?好像没办法用程序选.
还有,用ListBox,如何控制列表的滚动,比如说,将最匹配的放在列表显示区
中的第一个?
 
在 edit.onchange里面
select field1 from table1 where field2 like 'edit.text%'
 
>>>用ListBox,如何控制列表的滚动,比如说,将最匹配的放在列表显示区
中的第一个?
最匹配的放在第一个和控制滚动有什么关系呀?
重新排列listbox.items不就成了?
 
我说的意思是,将最匹配的放在显示区域的第一个,而其上面还可能存在其他
项.
 
那么如果最匹配的是最后一个怎么办? list框全空, 只在第一显示一条?
其实只要设置itemindex, 就会高亮显示选中的记录, 如果记录不在显示
区域内会自动滚动出来.
 
关键就在这里呀,要判断么
 
有必要一定要放在第一项吗? 难道listbox的高亮显示还不能提示用户哪个
是当前选中项吗? 如果非要放在第一项不能用listbox. 你自己做一个listboxlike
的控件吧.
 
多人接受答案了。
 
后退
顶部