OrangeUI

ListBox列表项的排序,
就是调用ListBox.Prop.Items.Sort(Compare: TListSortCompare);方法,
TListSortCompare = function (Item1, Item2: Pointer): Integer;
 
先准备一个界面,
顶部一个Panel,上面三个按钮,下面放个ListBox,如下图所示:

点击”名称”按钮表示按名称排序(名称保存在Item.Caption属性),
点击”日期”按钮表示按日期排序(日期保存在Item.Detail属性),
点击”大小”按钮表示按大小排序(大小保存在Item.Detail属性),
ListBox添加如下四个列表项:

接下来我们要实现点击”名称”按钮排序,
先定义一个排序方法,
方法的类型必须为TListSortCompare = function (Item1, Item2: Pointer): Integer;
如下图所示:

//按名称升序排序方法
function ListCompareByNameAsc(Item1, Item2: Pointer): Integer;
begin
Result:=0;
if LowerCase(TSkinListBoxItem(Item1).Caption)
>LowerCase(TSkinListBoxItem(Item2).Caption) then
begin
Result:=1;
end
else if LowerCase(TSkinListBoxItem(Item1).Caption)
<LowerCase(TSkinListBoxItem(Item2).Caption) then
begin
Result:=-1;
end;
end;
 
然后我们写”名称”按钮的OnClick事件:

procedure TFrameListBox_SortItems.btnSortByNameClick(Sender: TObject);
begin
//按名称排序
Self.lbFileList.Properties.Items.Sort(ListCompareByNameAsc);
end;
 
运行,效果如下,5,1,3,2:

点击”名称”按钮,1,2,3,5,看,按升序排列了: