[C++Builder]ツリービューのノードを移動する

ツリービューのノードを移動するには、TTreeNode.MoveToメソッドを使用します。

virtual void __fastcall MoveTo(TTreeNode* Destination, TNodeAttachMode Mode);

次のサンプルプログラムは、選択されているノードをツリービューの最終ノードの下に移動します。

//ボタンをクリックした時のイベント
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TTreeNode* selectedNode = TreeView1->Selected;  //選択されたノード
  if (selectedNode == NULL) return; //ノードが選択されていない
  //最終ノード
  TTreeNode* lastNode = TreeView1->Items->Item[TreeView1->Items->Count - 1];
  //選択されたノードが最終ノードの親ノードではないこと
  if (lastNode->HasAsParent(TreeView1->Selected)) return;
  //選択されたノードを最終ノードの子ノードにする
  selectedNode->MoveTo(lastNode, naAddChildFirst);
}


次のサンプルプログラムは、ドラッグアンドドロップでノードの位置を変更するプログラムです。

TreeView1のDragModeプロパティを「dmAutomatic」に変更します。

OnDragOverイベントを追加します。

//ドラッグした時のイベント
//ドロップを受け付けるかどうかを判定する
void __fastcall TForm1::TreeView1DragOver(TObject *Sender, TObject *Source, int X,
          int Y, TDragState State, bool &Accept)
{
  TTreeNode* targetNode = TreeView1->DropTarget; //ドラッグアンドドロップ処理のターゲット
  //ドラッグされているコントロールが自分以外、
  //またはドロップされるノードがない時は
  //ドラッグされたオブジェクトを受け入れない
  if (Sender != Source || targetNode == NULL)
  {
    Accept = false;
    return;
  }
  //ドラッグされたノードがターゲットのノードの親ノードではないこと
  if (targetNode->HasAsParent(TreeView1->Selected))
  {
    Accept = false;
  }
}

OnDragDropイベントを追加します。

//ドロップした時のイベント
//ノードを移動する
void __fastcall TForm1::TreeView1DragDrop(TObject *Sender, TObject *Source, int X,
          int Y)
{
  TTreeNode* targetNode = TreeView1->DropTarget; //ドラッグアンドドロップ処理のターゲット
  if (targetNode == NULL) return;

  TTreeNode* sourceNode = TreeView1->Selected; //ドラッグされたノード
  //ドラッグされたノードをドロップされたノードの子ノードにする
  sourceNode->MoveTo(targetNode, naAddChildFirst);
}


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください