我想按时间和姓名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;
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;
应该不是很复杂。
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”也是不能省略的关键语句
对应的列跟check搞混了````