查找ListBox的内容,
一个ListBox,一个Edit,
在Edit中输入内容,点击button 然后listbox内容清空,显示搜索出来的结果。
是模糊搜索,比如:123456 搜索123、234、456都可以显示出来结果。
如果结果不是1个 就依次显示在listbox的itme中。
谢谢!

解决方案 »

  1.   

    被搜的listbox与输出的listbox是同一个吗?
    for i:=listbox.items.count-1 downto 0 do
      if pos(edit.text,listbox.items[i])<1 then
        listbox.items.delete(i);
    //  if pos(edit.text,listbox.items[i])<1 then
    //也许要把pos的参数顺序调一下,忘了它的原型了
      

  2.   

    是同一个。但是弄2个也可以。搜索的时候显示结果的那个listbox显示在上边就可以了
      

  3.   

    说个思路,仅供参考
    感觉在点击button后不必清空listbox
    做个循环,遍历listbox的所有Items,使用pos函数看看子串(比如123)是否在项目中(比如123456),如果pos函数返回0则不再Item中,则删除这个Item,不返回0则此Item保留
      

  4.   

    是到SQL库里查吗? 还是查分edit1.text?先给你SQL库的var
      i: integer;
      sqlstr: string;
    begin
      sqlstr:= 'select * from table where 1 = 1';
      if length(trim(edit1.text)) > 2
      for i:= 1 to length(trim(edit1.text)) - 2 do
        sqlstr:= sqlstr + ' and abc = '''+ copy(trim(edit1.text),i,3) + '''';
      adoquery1.sql.text:= sqlstr;
      ...end;
      

  5.   

    同意2楼的兄弟的写法。但是能不能弄个多次查询那?貌似这个只能查询一次就over了。难道还要放个timer上去么?
      

  6.   

    就单纯的 edit输入内容 查询listbox的item而已。能多次模糊搜索的。2楼大哥已经搞定模糊搜索了 那个大哥能完善一下多次搜索。?
      

  7.   

    上面if 语句少一个then
    如果不是SQL的var
      L: integer; //长度
      i:integer;
      str: string;
    begin
    if length(trim(edit1.text)) > l then
      for i:= 1 to length(trim(edit1.text)) - 2 do 
        listbox1.items.append(copy(trim(edit1.text),i,L));
    ..
    end;
      

  8.   

    多次的话,得用一个list 变量了!
      

  9.   

    哦~ 原来找LISTBOX里的var 
      L: integer; //长度 如3: 123
      i:integer; 
      str: string; 
    begin 
      L:= 3;
    if length(trim(edit1.text)) > L then 
      for i:= 1 to length(trim(edit1.text)) - L do
        if pos(copy(trim(edit1.text),i,L), ...//pos后面的跟2楼的一样
      

  10.   


    字符大小写? 晕去了... copy管你大写小写
      

  11.   


    多次是什么意思?
    edit内容为abc,需要按a、b、c、ab、bc、abc各搜一次?
    还是
    按abc搜了后,允许按edit的新内容如wxyz再搜?——这样,需要先把listbox的items复制到一个字符串:sOld:=listbox.items.text;每次搜时,先listbox.items.text:=sOld;再搜