我正在尝试实现 MoveItemUp 和 MoveItemDown 方法,它们将选定的行向上或向下移动一个索引TCollection
。
添加到我的 TCollection 子类的以下代码不起作用:
procedure TMyCollection.MoveRowDown(index: Integer);
var
item:TCollectionItem;
begin
if index>=Count-1 then exit;
item := Self.Items[index];
Self.Delete(index); // whoops this destroys the item above.
Self.Insert(index+1);
Self.SetItem(index+1,item); // this actually does an assign from a destroyed object.
end;
我相当肯定这在运行时必须是可能的,因为它在设计时由 Delphi IDE 本身完成,它提供了一种重新排序列表中集合项的方法。我希望通过简单地重新排序现有对象来做到这一点,而无需创建、销毁或分配任何对象。这可能来自 Classes.pas TCollection 的子类吗?(如果没有,我可能必须从源克隆制作自己的 TCollection)