ツリービューのノードを移動するには、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);
}