VitrtualStringTree。如何Drag'n'Drop到ROOT水平?

时间:2013-11-09 06:35:07

标签: delphi delphi-xe delphi-xe4 virtualtreeview tvirtualstringtree

有一棵树: ROOT - VirtualStringTree(你看不到它,TVirtualStringTree.RootNode)

  • 我的根节点1
  • 我的根节点2
    • 第二个节点1
    • 第二个节点2
    • 第二个节点3
  • 我的根节点3

我可以将“我的根节点3”拖放到任何可见节点,但我无法将其返回到defaut位置,直到树的根级别。

我试试:

//Part of code from OnDragDrop Event of VirtualStringTree
    if (Sender.DropTargetNode = Sender.RootNode) then
    begin
      for i := 0 to high(Nodes) do
      begin
        LinksTree.MoveTo(Nodes[i], Sender.DropTargetNode, Attachmode, False);
      end;
    end;

我将鼠标放到了无处,但没有任何反应。在DragOver中,如果DropTarget是VST.RootNode,则接受drop to root。

有人知道,如果我将鼠标拖动到组件的空白区域,如何将节点拖放到VST.RootNode?

1 个答案:

答案 0 :(得分:6)

您还没有显示您的代码,但基本上,您只需要为Mode方法调用使用适当的(附加)MoveTo参数来处理情况,当(drop){{1您的Mode事件方法的参数等于OnDragDrop,这表示用户刚刚将节点删除到树的空白区域。我假设您正在使用以下代码来确定dmNowhere事件方法中的附加模式:

OnDragDrop

如果是这样,你可以告诉树附加节点,例如如果放弃模式为var ... AttachMode: TVTNodeAttachMode; begin ... // the Mode here is a drop mode parameter case Mode of dmNowhere: AttachMode := amNoWhere; // <- where this stands for no move ... end; ... end; ,则将附加模式更改为amAddChildLast,作为最后一个孩子:

dmNowhere