Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to highlight target node while dragging

Tags:

c#

winforms

i have a treeview and trying to move node to parent node(drag and drop),

Is there any way that allows targeted node to show a backcolor while mouse over(left button is still hold with an item dragged)?

[Update] how come following code not work ??

    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;
    }
like image 547
ikel Avatar asked Jul 16 '26 12:07

ikel


1 Answers

You can try something like this:

    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);
        }
    }

Edit

Here's an improved version that shouldn't cause flickering:

    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;
    }
like image 80
Veldmuis Avatar answered Jul 19 '26 03:07

Veldmuis