效果图如下: 方法很简单,只要从TStringList继承,覆盖sort方法即可,详见代码吧: unit Unit9; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, frxClass; type TSortType = (stASC = 1, stDESC = -1); TNumberSortList = class(TStringList) private FSortType: TSortType; function NumberSort(List: TStringList; Index1, Index2: Integer): Integer; public constructor Create; procedure Sort; override; property SortType: TSortType read FSortType write FSortType default stASC; end; TForm9 = class(TForm) Button2: TButton; ListBox1: TListBox; Button1: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form9: TForm9; implementation {$R *.dfm} { TNumberSortList } constructor TNumberSortList.Create; begin inherited Create; FSortType := stASC; end; function TNumberSortList.NumberSort(List: TStringList; Index1, Index2: Integer): Integer; var vSort, Value1, Value2: Integer; begin Value1 := StrToInt(List[Index1]); Value2 := StrToInt(List[Index2]); vSort := Integer(FSortType); if Value1 < Value2 then Result := 0 - vSort else if Value1 > Value2 then Result := vSort else Result := 0; end; function NumberListCompareStrings(List: TStringList; Index1, Index2: Integer): Integer; begin Result := TNumberSortList(List).NumberSort(List, Index1, Index2); end; procedure TNumberSortList.Sort; begin CustomSort(NumberListCompareStrings); end; function NumberSort(List: TStringList; Index1, Index2: Integer): Integer; var Value1, Value2: Integer; begin Value1 := StrToInt(List[Index1]); Value2 := StrToInt(List[Index2]); if Value1 < Value2 then Result := -1 else if Value1 > Value2 then Result := 1 else Result := 0; end; procedure TForm9.Button1Click(Sender: TObject); var vList: TNumberSortList; i: Integer; begin vList := TNumberSortList.Create; vList.SortType := stDESC; try for i := 0 to 50 do vList.Add(IntToStr(i)); vList.Sort; ListBox1.Items.Clear; for i := 0 to vList.Count - 1 do ListBox1.Items.Add(vList.Strings[i]); finally vList.Free; end; end; procedure TForm9.Button2Click(Sender: TObject); var vList: TStringList; i: Integer; begin vList := TNumberSortList.Create; try for i := 0 to 50 do vList.Add(IntToStr(i)); vList.Sort; ListBox1.Items.Clear; for i := 0 to vList.Count - 1 do ListBox1.Items.Add(vList.Strings[i]); finally vList.Free; end; end; end.