コード例 #1
0
        private void CategoryTree_DragOver(object sender, DragEventArgs e)
        {
            Point targetPoint = CategoryTree.PointToClient(new Point(e.X, e.Y));

            CategoryTree.SelectedNode = CategoryTree.GetNodeAt(targetPoint);
        }
コード例 #2
0
        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();
            }
        }