曾有人告诉我这种方法: var item:TListItem; begin item := ListView1.FindCaption(0,'你的值',True,True,True); if item = nil then begin //未找到 end else begin //找到 end; 但是不区分大小写,不知道有没有办法改进?
遍历ListView 取出Items值 字符串比较,下边两种都行 //对比字符串是不是一样: AnsiSameStr、AnsiSameText var ss,s: AnsiString; b: Boolean; begin ss := 'abc'; s := 'ABC'; b := AnsiSameStr(ss,s); {区分大小写} ShowMessage(BoolToStr(b)); {False} b := AnsiSameText(ss,s); {不区分大小写} ShowMessage(BoolToStr(b)); {True} ///////////////////////////////////////////////////// var s1,s2: string; i: Integer; begin s1 := 'abc'; s2 := 'adc'; i := CompareStr(s1,s2); ShowMessage(IntToStr(i)); {-2} i := CompareText(s1,s2); ShowMessage(IntToStr(i)); {-2} s1 := 'abc'; s2 := 'ABC'; i := CompareStr(s1,s2); {CompareStr 区分大小写} ShowMessage(IntToStr(i)); {32} i := CompareText(s1,s2); {CompareText 不区分大小写} ShowMessage(IntToStr(i)); {0}
最简单的方法就是遍历统一Up/Lower比较了,不过如果数据量很大的话速度会非常慢
for i := 0 to listView1.Items.Count - 1 do begin if Text(ListView1.Items[i].Caption)=Trim(Edit1.Text) then begin Result := True; Exit; end; end;
procedure TForm1.Button4Click(Sender: TObject); var flag : boolean; i, n : integer; begin flag := false; for i := 0 to ListView1.Items.Count - 1 do begin n := CompareStr(ListView1.Items[i].Caption, edit1.text); if n = 0 then begin flag := True; break; end; end; if flag then ShowMessage('True') else ShowMessage('False'); end;
猩猩无罪的对的,是不是你写法有问题 The following code compares String1, 'STEVE', to String2, 'STEVe'. Note that CompareStr returns a number less than 0 because the value of 'e' is greater than the value of 'E'.var String1, String2 : string; I : Integer; begin String1 := 'STEVE'; String2 := 'Steve'; I := CompareStr(String1, String2); { the value of I is < 0 } if I <> 0 then MessageDlg('The strings are not equal', mtWarning, [mbOK], 0) end;这是DELPHI帮助中的代码,看上面的意思就能明白了。
var
item:TListItem;
begin
item := ListView1.FindCaption(0,'你的值',True,True,True);
if item = nil then
begin
//未找到
end
else
begin
//找到
end;
但是不区分大小写,不知道有没有办法改进?
//对比字符串是不是一样: AnsiSameStr、AnsiSameText
var
ss,s: AnsiString;
b: Boolean;
begin
ss := 'abc';
s := 'ABC'; b := AnsiSameStr(ss,s); {区分大小写}
ShowMessage(BoolToStr(b)); {False} b := AnsiSameText(ss,s); {不区分大小写}
ShowMessage(BoolToStr(b)); {True}
/////////////////////////////////////////////////////
var
s1,s2: string;
i: Integer;
begin
s1 := 'abc';
s2 := 'adc';
i := CompareStr(s1,s2);
ShowMessage(IntToStr(i)); {-2} i := CompareText(s1,s2);
ShowMessage(IntToStr(i)); {-2} s1 := 'abc';
s2 := 'ABC';
i := CompareStr(s1,s2); {CompareStr 区分大小写}
ShowMessage(IntToStr(i)); {32} i := CompareText(s1,s2); {CompareText 不区分大小写}
ShowMessage(IntToStr(i)); {0}
begin
if Text(ListView1.Items[i].Caption)=Trim(Edit1.Text) then
begin
Result := True;
Exit;
end;
end;
Lowercase 下將字符串全部轉為小寫再對比。
假设Edit1.text为:ABC
而ListView1里现在AS,dc,DB,ABC,DDS等,
要求当Edit1.text包含在ListView1里时,程序执行A代码,
如果Edit1.text不包含在ListView1里时,程序执行B代码,
结果出现A代码执行了1次,B代码执行了4次!
var
flag : boolean;
i, n : integer;
begin
flag := false;
for i := 0 to ListView1.Items.Count - 1 do
begin
n := CompareStr(ListView1.Items[i].Caption, edit1.text); if n = 0 then
begin
flag := True;
break;
end;
end; if flag then
ShowMessage('True')
else
ShowMessage('False');
end;
猩猩无罪的对的,是不是你写法有问题
The following code compares String1, 'STEVE', to String2, 'STEVe'. Note that CompareStr returns a number less than 0 because the value of 'e' is greater than the value of 'E'.var String1, String2 : string;
I : Integer;
begin
String1 := 'STEVE';
String2 := 'Steve';
I := CompareStr(String1, String2); { the value of I is < 0 }
if I <> 0 then
MessageDlg('The strings are not equal', mtWarning, [mbOK], 0)
end;这是DELPHI帮助中的代码,看上面的意思就能明白了。