如何在Delphi的TcxTreeList中执行MoveTo函数后更新Node的索引

时间:2014-11-21 11:30:31

标签: delphi treelist

我想要实现的是用户可以通过单击“向上”和“向下”按钮重新排序节点。 这是我的代码。

 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;

结果:苹果,香蕉,糖果,钻石,大象

点击“向上”和“向下按钮超过一百次。”

结果:苹果,香蕉,糖果,钻石,大象

我的期望

大象,香蕉,糖果,钻石,苹果(因为我重新订购节点)

1 个答案:

答案 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属性需要更新是错误的。