我想按时间和姓名2种方法搜索ListView里面的数据`````搜索到了就跳掉ListView上面的那条数据上````请问该怎么实现```哪位高人帮帮忙```我写了一段代码``怎么不能实现`````
CurSearchNo=0是个全局变量``
procedure TSeachForm.btn1Click(Sender: TObject);
Var
  iLoop: Integer;
  SearchStr: String;
begin
  if rb2.Checked then
  begin
  SearchStr := Trim(edt1.Text);
    if SearchStr='' then exit;
    if CurSearchNo>=Form1.lv1.Items.Count then CurSearchNo := 0;
    for iLoop:=CurSearchNo to Form1.lv1.Items.Count-1 do
    begin
      if Pos(SearchStr, Form1.lv1.Items[iLoop].SubItems[0])>0 then
        begin
            if Form1.lv1.SelCount=1 then
              Form1.lv1.Items[Form1.lv1.Selected.Index].Selected:=False;
              Form1.lv1.Items[iLoop].Selected:=True;
              Form1.lv1.Items.Item[iLoop].MakeVisible(False);
              Form1.lv1.SetFocus;
              CurSearchNo := iLoop+1;
              break;
        end
      else
      begin
        CurSearchNo := 0;
      end;
    end;
  end;
end;

解决方案 »

  1.   

    用它的node吧?
    应该不是很复杂。
      

  2.   

               if Form1.lv1.SelCount=1 then 
                  Form1.lv1.Items[Form1.lv1.Selected.Index].Selected:=False; 
                  Form1.lv1.Items[iLoop].Selected:=True; 
                  Form1.lv1.Items.Item[iLoop].MakeVisible(False); 
                  Form1.lv1.SetFocus; 
                  CurSearchNo := iLoop+1; 
                  break; 
    我认为你的算法应该是没有问题的,关键在于“跳到相应行”的这一操作可能未实现,你可以试试当查找到相应行后,使用“Form1.lv1.ItemIndex:=找到的那一行的行号”来试试,当然你原来的“Form1.lv1.setFocus”也是不能省略的关键语句
      

  3.   

    搞定了```哈哈   原来是if Pos(SearchStr, Form1.lv1.Items[iLoop].SubItems[0])>0 then 
    对应的列跟check搞混了````