我想要实现的是,用户可以通过单击"向上"和"向下"按钮来重新排序节点。这是我的代码。
procedure TForm1.btnUPClick(Sender: TObject);
var tempNode : TcxTreeListNode;
sIndex : integer;
begin
if cxTreeList1.FocusedNode = nil then exit;
cxTreeList1.FocusedNode.MoveTo(cxTreeList1.FocusedNode.GetPrev, tlamInsert);
end;
难怪代码工作正常。我可以看到节点正在上下移动。但似乎他们的索引在移动后没有更新。
测试代码:
for i:=0 to cxTreeList1.count -1 do begin
showmessage(cxTreeList1.nodes[i].values[0]);
end;
结果:苹果、香蕉、糖果、钻石、大象
单击"向上"和"向下按钮超过一百次后。
结果:苹果、香蕉、糖果、钻石、大象
我所期望的
大象、香蕉、糖果、钻石、苹果(因为我重新订购了节点)
你指的是Developer Express TcxTreelist,是吗?
我问的原因是,如果我尝试您的代码,编译器会反对"节点"作为一个未知的标识符,所以我不清楚你是如何设法让你的代码编译的,更不用说运行了。 但是,使用 Devex 的 TcxTreelist,以下代码按照当前显示的顺序正确列出树项(即我单击"向上"按钮后在树列表中看到的内容,比如"Banana"),而不是它们在 IDE 的项目编辑器中显示的原始顺序。 请注意,这使用树列表的 Items 属性,而不是其"节点":
procedure TForm1.btnGetItemsClick(Sender: TObject);
var
i : Integer;
begin
Memo1.Lines.Clear;
for i:=0 to cxTreeList1.Count - 1 do begin
Memo1.Lines.Add(cxTreeList1.Items[i].Values[0]);
end;
end;
顺便说一句,关于您的 q 标题中的要点:我认为您认为节点的 Index 属性需要更新的假设是错误的。