在树视图中拖动节点并在其中拖动节点

时间:2019-03-21 15:19:07

标签: c# visual-studio

我想画线指的是树状视图中鼠标在拖动中所击中的节点 使用户能够看到他将节点放在其中的位置 类似于Windows like this image

中的拖放操作

1 个答案:

答案 0 :(得分:0)

Afaik在拖放操作的移动部分不会产生任何事件。

要创建反馈,您可以使用Timer;在ItemDrag事件中将其启动,并在DragDrop中停止。

Tick中,您可以通过选择当前鼠标光标下方的节点或画一条线来提供视觉反馈。

以下是获取光标下方的节点并画一条线的方法:

private void timer1_Tick(object sender, EventArgs e)
{
    if (Control.MouseButtons.HasFlag(MouseButtons.Left))
    {
        using (Graphics g = treeView1.CreateGraphics())
        {
            treeView1.Refresh();
            var hitt = treeView1.HitTest(treeView1.PointToClient(Control.MousePosition));
            var n = hitt.Node;
            if (n != null)
            {
                int y = n.Bounds.Y;  // draw above the node; maybe change to n.Bound.Bottom ?
                Size sz = treeView1.ClientSize;
                g.DrawLine(Pens.Orange, 0, y, sz.Width, y);
            }
        }
    }
}

请注意,这是您使用control.CreateGraphics()实际绘制到控件上的罕见情况之一。

还请注意,通常棘手的部分实际上是决定放置位置:在与节点相同的级别上(因此将项目重新排序在同一级别上),或者在更接近根的级别上成为最后一个节点..? -示例:Windows File Explorer不允许您重新排序项目。