我想要实现的是,用户可以通过单击“向上”和“向下”按钮重新排序节点。这是我的密码。
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;结果:苹果,香蕉,糖果,钻石,大象
单击“向上”和“向下”按钮超过100次。
结果:苹果,香蕉,糖果,钻石,大象
如我所料
大象,香蕉,糖果,钻石,苹果(因为我重新订购了节点)
发布于 2014-11-21 11:52:21
你指的是Developer Express TcxTreelist,是吗?
我问的原因是,如果我尝试您的代码,编译器会将“节点”作为一个未知的标识符,所以我不清楚您是如何使代码编译,更不用说运行了。但是,使用Devex的TcxTreelist,下面的代码按照当前显示的顺序正确地列出了树项(即单击Up按钮后在treelist中看到的内容,比如'Banana'),而不是显示在IDE项目编辑器中的原始顺序。请注意,这使用treelist的Item属性,而不是它的“节点”:
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属性需要更新的假设是错误的。
https://stackoverflow.com/questions/27060362
复制相似问题