在TtreeView1.DragDrop中使用
之类的语句 targetnode := TreeView1.GetNodeAt(x,y);
...
TreeView1.Selected.MoveTo(targetnode , naInsert ) ;
使用鼠标移动节点并将其插入同一级别的现有节点之前,即上方。
我喜欢改变行为,这样如果我向下拖动节点会移动到目标下方,但如果我向上拖动它会移动到目标上方(否则我可以拖到新的底部位置但不是新的顶部或反之亦然)。 我正在尝试的那种结构是
targetnode := TreeView1.GetNodeAt(x,y);
...
if DraggedItem.Index > targetnode.Index then //we are dragging upwards, insert before
TreeViewStructure.Selected.MoveTo(targetnode , naInsert )
else //we are dragging downwards, insert after
TreeViewStructure.Selected.MoveTo(targetnode , ???) ;
但我找不到在目标节点之后插入兄弟的TNodeAttachMode常量。 这里给出的TNodeAttachMode的常量http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/ComCtrls_TNodeAttachMode.html是......
naAdd: The new or relocated node becomes the last sibling of the other node.
naAddFirst: The new or relocated node becomes the first sibling of the other node.
naInsert:The new or relocated node becomes the sibling immediately before the other node.
naAddChild:The new or relocated node becomes the last child of the other node.
naAddChildFirst:The new or relocated node becomes the first child of the other node.
但这些都没有提到新的最后一个兄弟。
我能做我想做的事吗?如果是这样的话?
答案 0 :(得分:1)
没有选项可以在节点之后插入,只能在之前插入。因此,您必须在放置目标之后找到节点,并在其之前插入。
要在最后一个节点之后添加,请找到最后一个节点并将naAdd
传递给MoveTo
。
答案 1 :(得分:0)
感谢大卫的建议。使用它们我终于编写了以下代码来实现我的需要。发布在这里,以防其他人使用它。 (这是OnDragDrop中相关的代码)
if ( Assigned(targetnode)) //we are over a target node
and (DraggedNode.Level = targetnode.Level then //we are dragging within the same sub level
begin
if targetnode.Index = targetnode.Parent.Count -1 then //target is the last node so do an naAdd to drop node at the end
TreeViewStructure.Selected.MoveTo(targetnode , naAdd )
else
TreeViewStructure.Selected.MoveTo(targetnode , naInsert ) //drop before target using naInsert
end;