DevExpress.XtraTreeList.Nodes.TreeListNodeを利用して、ツリー上のノードをドラッグ&ドロップで移動させる。
1.ドラッグ&ドロップの有効化
ツリー上のノードをドラッグ&ドロップを有効にするには、以下のプロパティを有効にする必要がある。
1 2 |
this.treeList.AllowDrop = true; this.treeList.OptionsBehavior.DragNodes = true; |
2.イベントの追加
ドラッグ&ドロップ時のイベントを追加するため、DragOver,DragDrop
のイベントを追加する。
DragOverはドラッグ中、DragDropドラッグにそれぞれイベントが発生する。
3.ドラッグ中のイベント処理
ドラッグ中のイベント処理では、ノードの移動可否を判定する。
ドラッグ後のノード移動先には以下の種類がある。
ドラッグしたノードを、対象ノードの配下に移動させる場合
ドラッグしたノードを、対象ノードの後に移動させる場合
ドラッグしたノードを、対象の前に移動させる場合
例えば、以下のようにグループ配下に、ノードを置きたい場合は、以下のようにDragDropEffects.Moveを設定する。
1 2 3 4 5 6 7 8 9 10 11 |
private void treeList_DragOver(object sender, DragEventArgs e) { // ドラッグイベントの取得 DXDragEventArgs dxArg = this.treeList.GetDXDragEventArgs(e); // 配下のみノードの移動OK if (dxArg.DragInsertPosition == DragInsertPosition.AsChild) { e.Effect = DragDropEffects.Move; } } |
一方、グループ配下に、ノードを置きくない場合は、以下のようにDragDropEffects.Noneを設定する。
1 2 3 4 5 |
// 配下のみノードの移動NG if (dxArg.DragInsertPosition == DragInsertPosition.AsChild) { e.Effect = DragDropEffects.None; } |
4.ドラッグ後のイベント処理
ドラッグ後のイベント処理では、ターゲットノードとドラッグされたノードを利用して、後処理を行う。
1 2 3 4 5 6 7 8 9 10 11 12 |
private void treeList_DragDrop(object sender, DragEventArgs e) { // ドラッグイベントの取得 DXDragEventArgs dxArg = this.treeList.GetDXDragEventArgs(e); // ターゲットノード var targetNode = (CustomLayerTreeNode)dxArg.TargetNode; // ドラッグされたノード var draggedNode = e.Data.GetData(typeof(CustomLayerTreeNode)) as CustomLayerTreeNode; // 何か処理を記述 |