C# 在树视图上绘制线,同时在其中拖动节点

C# 在树视图上绘制线,同时在其中拖动节点,c#,visual-studio,C#,Visual Studio,我想画一条线,指的是树状视图中鼠标拖动时碰到的节点 让用户能够看到将节点放置到的位置 类似于windows中的拖放操作,在拖放操作的移动部分不会生成任何事件 要创建反馈,您可以使用计时器;在itemrag事件中启动它,并在DragDrop中停止 在勾选中,您可以通过选择鼠标光标下的当前节点或绘制一条线来提供视觉反馈 以下是如何在光标下获取节点并绘制一条线: private void timer1_Tick(object sender, EventArgs e) { if (Control

我想画一条线,指的是树状视图中鼠标拖动时碰到的节点 让用户能够看到将节点放置到的位置
类似于windows中的拖放操作,在拖放操作的移动部分不会生成任何事件

要创建反馈,您可以使用
计时器
;在
itemrag
事件中启动它,并在
DragDrop
中停止

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

以下是如何在光标下获取节点并绘制一条线:

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文件资源管理器不允许您对项目进行重新排序。

您可以显示到目前为止的代码,即d&d代码吗?您是否有解决闪烁问题的方法,因为每次都是“treeView1.Refresh();”?我的树没有那么大,我看不到任何闪烁。您可能会尝试添加,但我不确定这是否有帮助。我打赌在TreeView上使用BeginUpdate/EndUpdate可以改善这一点。这只是一个猜测,还是您尝试过并看到了差异?