我試圖實現MoveItemUp和MoveItemDown方法,將選定的行向上或向下移動到一個TCollection
內的一個索引。如何重新排列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)
設置集合項目的'Index'屬性應該執行'Item.Index:= Item.Index + 1'(這將調用集合的項目列表的「Move」)。如果需要進行特殊處理,則將重寫SetIndex方法。 –