我有一个 TListBox,其中包含位置列表(每个位置都有名称和距离当前位置的距离)。我希望用户可以选择按位置名称(按字母顺序)或按距离从他们当前位置排序。位置名称存储为项的 ItemData.Text 值,距离当前位置的距离存储为 ItemData.Detail 值。问题是,常规的 TListBox 排序方法在排序时不使用 ItemData.Detail 属性(仅使用 ItemData.Text 属性)。有可能向 TListBox 添加自定义排序方法,按每个项目的 ItemData.Detail 值进行排序吗?
我尝试了以下方法,但它不起作用:
以下是翻译的结果:
我尝试了以下方法,但它不起作用:
procedure TFrmSelect.btnSortLocationClick(Sender: TObject);
var Compare: TFMXObjectSortCompare;
begin
btnSortLocation.Enabled := False;
btnSortAlpha.Enabled := True;
Compare := function(item1, item2: TFmxObject): Integer
begin
Result := TListBoxItem(item1).ItemData.Detail.CompareTo(TListBoxItem(item2).ItemData.Detail);
end;
self.ListBox.Sort(Compare);
self.ListBox.Sorted := False;
self.ListBox.Sorted := True;
end;
以下是翻译的结果:
这里是一个需要排序的示例列表图片: