delphi listbox 排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi listbox 排序相关的知识,希望对你有一定的参考价值。
内容大概是这样的:
listbox1 listbox2
12542645----汉字654464
我想把listbox1里面的前面几位数字进行排序、显示在listbox2中
形如这样:
listbox1 listbox2
排序后
12542645----汉字654464 -----> 564446----汉字454465
564446----汉字454465 12542645----汉字654464
因为前面的数字有长有短、只要区分前面数字的大小、就OK
代码如下:
with lst1 do
begin
for i:=0 to Count-1 do
for j:=i to Count-1 do
if StrToInt(Items[i])>StrToInt(Items[j]) then
begin
temp:=Items[i];
Items[i]:=Items[j];
Items[j]:=temp;
end;
end;
if StrToInt(Items[i])>StrToInt(Items[j]) then
这一行是判断单纯数字、但是里面有汉字符号、就不好搞了!
那个sorted属性、是按字母排序的、
function MyCustomCompare(List: TStringList; Index1, Index2: Integer): Integer;
var
S1, S2: string;
N1, N2: Integer;
begin
S1 := List[index1];
S2 := List[index2];
Result := 0;
if S1 = S2 then
Exit;
N1 := Pos('-', S1); //---
if N1 = 0 then
begin
Result := -1;
Exit;
end;
N2 := Pos('-', S2); //---
if N2 = 0 then
begin
Result := 1;
Exit;
end;
N1 := StrToIntDef(Copy(S1, 1, N1 - 1), 0);
N2 := StrToIntDef(Copy(S2, 1, N2 - 1), 0);
if N1 = N2 then
Result := 0
else
if N1 > N2 then
Result := 1
else
if N1 < N2 then
Result := -1;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStringList;
begin
sl := TStringList.Create;
try
sl.Assign(lst1.Items);
sl.CustomSort(MyCustomCompare);
lst2.Clear;
lst2.Items.AddStrings(sl);
finally
sl.Free;
end; // try
end;
来个效果图:
参考技术A 不用自己写代码排序,直接用它的Sorted属性就行了,比如:lst1.Sorted:=True;//排序
以上是关于delphi listbox 排序的主要内容,如果未能解决你的问题,请参考以下文章