private void CategoryTree_DragOver(object sender, DragEventArgs e) { Point targetPoint = CategoryTree.PointToClient(new Point(e.X, e.Y)); CategoryTree.SelectedNode = CategoryTree.GetNodeAt(targetPoint); }
private void CategoryTree_DragDrop(object sender, DragEventArgs e) { // 获取拖拽到的节点 Point targetPoint = CategoryTree.PointToClient(new Point(e.X, e.Y)); TreeNode targetNode = CategoryTree.GetNodeAt(targetPoint); // 获取被拖拽得节点 if (e.Data.GetDataPresent(typeof(List <Book>))) { List <Book> books = (List <Book>)e.Data.GetData(typeof(List <Book>)); if (targetNode.Tag is KeywordAndUser) { Keywords k = ((KeywordAndUser)targetNode.Tag).Keyword; for (int i = 0; i < books.Count; i++) { JianLiLinq.Default.BookMarkKeyword(books[i], k); } db.SubmitChanges(); if (AfterSelectKeyword != null) { AfterSelectKeyword(k); } } } else if (e.Data.GetDataPresent(typeof(TreeNode))) { TreeNode draggedNode = (TreeNode)e.Data.GetData(typeof(TreeNode)); // 不能在关键词之下建立类别 if (targetNode.Tag is KeywordAndUser) { return; } if (ContainsNode(draggedNode, targetNode)) { if (draggedNode.Parent != null) { draggedNode.Parent.Expand(); } return; } // 处理被移动的关键字 if (draggedNode.Tag is KeywordAndUser) { if (!draggedNode.Equals(targetNode)) { Keywords k = ((KeywordAndUser)draggedNode.Tag).Keyword; k.CategoryId = ((Categories)(targetNode.Tag)).CategoryID; db.SubmitChanges(); draggedNode.Remove(); // 父节点完成初始化 if (targetNode.Nodes.Count == 1 && targetNode.Nodes[0].Text == "占位") { CreateSonNode(targetNode); } else { targetNode.Nodes.Add(draggedNode); } } } else if (draggedNode.Tag is Categories) { if (!draggedNode.Equals(targetNode)) { Categories c = (Categories)(draggedNode.Tag); c.CategoryParent = ((Categories)(targetNode.Tag)).CategoryID; db.SubmitChanges(); draggedNode.Remove(); // 父节点完成初始化 if (targetNode.Nodes.Count == 1 && targetNode.Nodes[0].Text == "占位") { CreateSonNode(targetNode); } else { targetNode.Nodes.Add(draggedNode); } } } draggedNode.Parent.Expand(); } }