在Delphi 7中按字母顺序排序TListBox项目

问题描述 投票:1回答:1

我试图在添加/编辑条目后触发TListBox控件中的项目排序。

我看到有一个Sorted属性我已经设置为true,但是,每次我对内容进行更改时,这都不会动态地对ListBox进行排序。似乎没有任何可用的排序过程或功能,并且调用更新或刷新不具有所需的效果。

我已经到了这个阶段,我正在考虑将ListBox的内容拉入TStringList对象,对其进行排序,然后再将所有内容放回到ListBox中。这看起来有点疯狂,当然我忽略了一些更好的方法。

以下是更改现有项目的示例:

 myListBox.Items[myIndex] := newString; // Update Text
 myListBox.Items.Objects[myIndex] := TObject(my_object); // Update associated object

我希望控件更新以按字母顺序排序,但事实并非如此。

delphi sorting delphi-7 tlistbox
1个回答
5
投票

列表框的排序属性实际上由Win32列表框样式LBS_SORT支持。这将在添加新项目时对列表框进行排序。但是在修改现有项目时不会这样做。

因此,解决这个问题的简单方法是将Sorted设置为True,然后,不是修改现有值,而是删除旧值并添加新值。所以你的代码将成为:

myListBox.Items.Delete(myIndex);
myListBox.Items.AddObject(newString, TObject(my_object));

如果你考虑一下,如果列表框的行为符合你的预期,你的代码就注定要失败。因为在修改了项目的文本后,如果列表被重新排序,那么myIndex将不再引用相同的项目。

© www.soinside.com 2019 - 2024. All rights reserved.