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



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

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

相关内容

  • 没有找到相关文章

最新更新