4

A ツリーがあります: ROOT - VirtualStringTree(TVirtualStringTree.RootNode は表示されません)

  • 私のルートノード 1
  • 私のルートノード 2
    • 2 番目のノード 1
    • 2 番目のノード 2
    • 2 番目のノード 3
  • 私のルートノード 3

「My Root Node 3」を任意の可視ノードにドラッグ アンド ドロップできますが、ツリーのルート レベルにあるデフォルトの位置に戻すことはできません。

私はそれを試します:

//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 の場合、ルートへのドロップを受け入れました。

マウスをコンポーネントの空きスペースにドラッグした場合、ノードを VST.RootNode にドロップする方法を知っている人はいますか?

4

1 に答える 1

6

コードは示していませんが、基本的には、イベント メソッドの (ドロップ) パラメーターが に等しい場合に、メソッド呼び出しに適切な (アタッチ)Modeパラメーターを使用するだけで済みます。これは、ユーザーがノードをドロップしたことを示します。 (s) ツリーの空きスペースに。イベントメソッドでアタッチモードを決定するために、次のようなコードがあると思います:MoveToModeOnDragDropdmNowhereOnDragDrop

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ます。

var
  ...
  AttachMode: TVTNodeAttachMode;
begin
  ...
  // the Mode here is a drop mode parameter
  case Mode of
    dmNowhere: AttachMode := amAddChildLast; // <- attach node as a last child
    ...
  end;
  ...
end;
于 2013-11-09T09:50:48.513 に答える