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 排序的主要内容,如果未能解决你的问题,请参考以下文章

delphi怎样获得listbox里被鼠标选中的行的内容

delphi函数里面不可以出现控件吗

delphi如何搜索某一文件夹下的所有文件夹,显示在ListBox内?

Delphi 多线程问题

对ListBox控件中的数据进行排序

按listbox中的字符串排序方法