我想要实现的是用户可以通过单击“向上”和“向下”按钮重新排序节点。 这是我的代码。
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;
结果:苹果,香蕉,糖果,钻石,大象
点击“向上”和“向下按钮超过一百次。”
结果:苹果,香蕉,糖果,钻石,大象
我的期望
大象,香蕉,糖果,钻石,苹果(因为我重新订购节点)
答案 0 :(得分:0)
您指的是Developer Express TcxTreelist,是吗?
我问的原因是如果我尝试你的代码,编译器会反对“节点” 作为一个未知的标识符,所以我不清楚你是如何设法让你的代码编译,更不用说运行了。但是,使用Devex的TcxTreelist,以下代码按照当前显示的顺序正确列出树项目(即在我点击“向上”按钮后我在树状列表中看到的内容,说“Banana” ),而不是IDE中的Items编辑器中显示的原始顺序。请注意,这使用了treelist的Items属性,而不是它的“Nodes”:
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属性需要更新是错误的。