0

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

 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;

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

单击“向上”和“向下”按钮一百多次后。

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

我所期望的

大象、香蕉、糖果、钻石、苹果(因为我重新排序了节点)

4

1 回答 1

0

您指的是 Developer Express TcxTreelist,是吗?

我问的原因是,如果我尝试你的代码,编译器会将“节点”作为未知标识符反对,所以我不清楚你是如何设法让你的代码编译的,更不用说运行了。但是,使用 Devex 的 TcxTreelist,以下代码按当前显示的顺序正确列出了树项目(即,在我单击向上按钮后,我在树列表中看到的内容,比如“香蕉”),而不是它们的原始顺序为显示在 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 属性需要更新的假设是错误的。

于 2014-11-21T11:52:21.043 回答