private void OnDrop_MoveNode(TreeTreeNode <T> _dst, TreeNode src, TreeNodeDDTarget target) { TreeTreeNode <T> _src = src as TreeTreeNode <T>; if (_src == null) { return; } T dval = _dst.Value; switch (target) { case TreeNodeDDTarget.Self: dval.Nodes.Add(_src.Value); _dst.Nodes.Add(_src); break; case TreeNodeDDTarget.Child: dval.Nodes.Insert(0, _src.Value); _dst.Nodes.Insert(0, _src); break; case TreeNodeDDTarget.Prev: dval.Parent.Nodes.Insert(dval.Parent.Nodes.IndexOf(dval), _src.Value); _dst.ParentNode.Nodes.InsertBefore(_dst, _src); break; case TreeNodeDDTarget.Next: dval.Parent.Nodes.Insert(dval.Parent.Nodes.IndexOf(dval) + 1, _src.Value); _dst.ParentNode.Nodes.InsertAfter(_dst, _src); break; } }
//----------------------------------------------------------------------- // OnDrop //----------------------------------------------------------------------- /// <summary> /// ドロップ処理を実行します。 /// </summary> /// <param name="node">処理対象のノードを指定します。</param> /// <param name="e">ドラッグの情報を指定します。</param> public override void OnDrop(TreeNode node, TreeNodeDragEventArgs e) { TreeTreeNode <T> _dst = node as TreeTreeNode <T>; TreeNodeDDTarget target = this.GetTarget(node, e); switch (e.Effect & this.GetEffect(node, e)) { case Forms::DragDropEffects.Move: { TreeNode node2 = e.Data.GetData("afh.Forms.TreeNode") as TreeNode; if (node2 != null) { this.OnDrop_MoveNode(_dst, node2, target); break; } Gen::List <TreeNode> list = e.Data.GetData("afh.Forms.TreeNode:List") as Gen::List <TreeNode>; if (list != null) { this.OnDrop_MoveList(_dst, list, target); break; } break; } case Forms::DragDropEffects.Link: case Forms::DragDropEffects.Copy: throw new System.NotImplementedException(); default: break; } }
private void OnDrop_MoveList(TreeTreeNode <T> _dst, Gen::List <TreeNode> list, TreeNodeDDTarget target) { _todo.TreeNodeDisplayHeight("TreeNodeCollection.Suppress: ノードリストの幾何再計算・再描画を抑止"); _todo.TreeNodeDisplayHeight("target==Child の時は AddRange を利用する様にする?"); using (_dst.Nodes.SuppressLayout()) foreach (TreeNode node3 in list) { this.OnDrop_MoveNode(_dst, node3, target); } }