如何在拖动时突出显示目标节点

本文关键字:显示 目标 节点 拖动 | 更新日期: 2023-09-27 18:14:39

我有一个树视图,并试图移动节点到父节点(拖放),

是否有任何方法允许目标节点显示背景色,而鼠标在(左键仍然保持与拖动的项目)?

(更新)为什么下面的代码不工作??

    private TreeNode nodeOver=null;
    private void treeView_DragOver(object sender, DragEventArgs e)
    {
       Point p = treeView.PointToClient(new Point(e.X, e.Y));
       nodeOver = treeView.GetNodeAt(p.X, p.Y);
        nodeOver.BackColor = Color.Aquamarine;
    }
    private void treeView_DragLeave(object sender, EventArgs e)
    {
        nodeOver.BackColor = Color.White;
    }

如何在拖动时突出显示目标节点

您可以尝试这样做:

    private void treeView_DragOver(object sender, DragEventArgs e)
    {
        ClearBackground(treeView.Nodes);
        Point p = treeView.PointToClient(new Point(e.X, e.Y));
        TreeNode node = treeView.GetNodeAt(p.X, p.Y);
        node.BackColor = Color.Aquamarine;
    }
    private void ClearBackground(TreeNodeCollection nodes)
    {
        foreach (TreeNode node in nodes)
        {
            node.BackColor = Color.White;
            ClearBackground(node.Nodes);
        }
    }

编辑

这是一个改进的版本,应该不会引起闪烁:

    private void treeView_DragOver(object sender, DragEventArgs e)
    {
        Point p = treeView.PointToClient(new Point(e.X, e.Y));
        TreeNode node = treeView.GetNodeAt(p.X, p.Y);
        if (node.PrevVisibleNode != null)
        {
            node.PrevVisibleNode.BackColor = Color.White;
        }
        if (node.NextVisibleNode != null)
        {
            node.NextVisibleNode.BackColor = Color.White;
        }
        node.BackColor = Color.Aquamarine;
    }

Veldmius,你上面的答案不可靠,而且有点啰嗦。如果没有前一个或下一个节点可用,则NextVisibleNode和PreviousVisibleNode抛出空异常。

我的做法如下…转到设计器中的树视图属性。Set hidesselection = False

然后用这两行代码连接拖放事件。

private void treeview1_DragOver(object sender, DragEventArgs e)
    {
        TreeNode node = treeview1.GetNodeAt(treeview1.PointToClient(new Point(e.X, e.Y)));
        treeview1.SelectedNode = node;
    }