如何在listbox裡找到相符的資料? |
答題得分者是:pigbaby
|
writeman
初階會員 發表:31 回覆:34 積分:28 註冊:2004-02-17 發送簡訊給我 |
hi all
我有一個edit裡可輸入字串
又有一個listbox裡放了一些字串
我想要做到當我edit發生onchange時就去比對listbox裡的每個item
若有部份符合就把它放到第一項去(捲動到第一項)
我在listbox裡用了indexof來做
但發現listbox只有在完全比對成功時才會把item資料選出
是否能做到部份符合就選出呢???
procedure TForm1.Edit1Change(Sender: TObject); var str: string; idx: integer; begin str:= edit1.Text; idx:= listbox1.Items.IndexOf(str); if(idx >= 0)then begin listbox1.ItemIndex:= idx; end; end; |
pigbaby
初階會員 發表:2 回覆:84 積分:47 註冊:2002-09-02 發送簡訊給我 |
豬寶寶的寫法
可能有點笨...請多包涵^^
procedure TForm1.Edit1Change(Sender: TObject);
var
I: Integer;
str: string;
idx: integer;
begin
str:= edit1.Text;
for I := 0 to LISTBOX1.Items.Count - 1 do
begin
if STR=COPY(LISTBOX1.Items.Strings[I],1,LENGTH(STR)) then
begin
listbox1.ItemIndex:= I;
EXIT;
end;
end; // for
end; >_<
用CODE會排不出來..只能用這種沒縮排的了>_< 發表人 - pigbaby 於 2004/11/18 11:52:55
|
writeman
初階會員 發表:31 回覆:34 積分:28 註冊:2004-02-17 發送簡訊給我 |
引言: 豬寶寶的寫法 可能有點笨...請多包涵^^感謝豬寶寶 上面的方法可以 不過我想再做到難一點 可否在比對時 if STR=COPY(LISTBOX1.Items.Strings[I],1,LENGTH(STR)) then 不只是從1開始呢 也就是在整個字串中只要符合就行 應該是指類似全文檢索那樣?procedure TForm1.Edit1Change(Sender: TObject); var I: Integer; str: string; idx: integer; begin str:= edit1.Text; for I := 0 to LISTBOX1.Items.Count - 1 do begin if STR=COPY(LISTBOX1.Items.Strings[I],1,LENGTH(STR)) then begin listbox1.ItemIndex:= I; EXIT; end; end; // for end;>_< 用CODE會排不出來..只能用這種沒縮排的了>_< 發表人 - pigbaby 於 2004/11/18 11:52:55 |
tonytop
中階會員 發表:6 回覆:114 積分:89 註冊:2003-12-04 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
writeman您好:
试试这个吧
procedure TForm1.Edit1Change(Sender: TObject); var str:string; begin str:=edit1.Text; With listbox1 Do itemindex := Perform( LB_FINDSTRING, ItemIndex, Longint(PChar(str))); end;——行径窄处,留一步与人行—— 發表人 - deity 於 2004/11/18 13:50:49 |
writeman
初階會員 發表:31 回覆:34 積分:28 註冊:2004-02-17 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
|
pigbaby
初階會員 發表:2 回覆:84 積分:47 註冊:2002-09-02 發送簡訊給我 |
|
writeman
初階會員 發表:31 回覆:34 積分:28 註冊:2004-02-17 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
稍做改变即可,怪自己没试
< class="code">
procedure TForm1.Edit1Change(Sender: TObject);
var
str:string;
begin
str:=edit1.Text;
With listbox1 Do
itemindex := Perform(LB_FINDSTRING, ItemIndex-1,
Longint(PChar(str)));
// itemIndex:=SendMessage(handle,LB_FINDSTRING,-1,Longint(PChar(str)));//改成这句也行
end;
pigbaby前辈,客气了,您写的也让小弟学了一招,以后还得多请教您呢
>> ——行径窄处,留一步与人行—— 發表人 -
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |