繁体   English   中英

.NET 2.0 C#Treeview在TreeNodes中的拖放

[英].NET 2.0 C# Treeview Drag/Drop within TreeNodes

我对捕获拖放事件感兴趣,该事件将从用户将现有TreeNode拖动到TreeView中的某处开始。 当用户拖动TreeNode时,我对捕获何时在两个树节点之间拖动节点感兴趣。 当用户执行此操作时,我想在树节点之间显示一个哈希标记,以指定该节点是作为子节点还是同级节点放置在节点中。 此哈希标记将显示以下任一值:-在目标节点下方(以指示源节点将作为目标节点的子节点被丢弃),或-在目标节点下方(以指示源节点将被替代的节点作为兄弟节点)目标节点)之前或之后...

我使用DragOver事件取得了一些进展。 我正在计算鼠标的位置,并在拖动鼠标时推导出顶部和底部的节点。

        int threshold = 8;  //Joe(hack)
        Point mouseLocation = mouseLocation = treeViewConditions.PointToClient(new Point(e.X, e.Y - threshold));
        TreeNode topNode = treeViewConditions.GetNodeAt(mouseLocation);
        mouseLocation = treeViewConditions.PointToClient(new Point(e.X + threshold, e.Y));
        TreeNode bottomNode = treeViewConditions.GetNodeAt(mouseLocation);

        if (topNode != null && bottomNode == null)
        {
            textBoxDescription.Text = "handling top node";
        }
        else if (topNode == null && bottomNode != null)
        {
            textBoxDescription.Text = "handling bottom node";
        }
        else if (topNode != null && bottomNode != null)
        {
            if (topNode != bottomNode)
            {
                textBoxDescription.Text = "between!";
            }
            else if (topNode == bottomNode)
            {
            }
        }

但是,这样做只会感觉很脏。 我想知道是否有人知道更好的方法来完成此任务。

在此先感谢一吨!

绘制“哈希标记”将是真正的问题。 TreeView具有DrawMode属性,但其DrawItem事件不允许您在节点之间进行绘制。

您需要通过更改光标以指示将要发生的事情来进行处理。 使用GiveFeedback事件,将e.UseCustomCursors设置为false,并将Cursor.Current分配给表示该操作的自定义光标。

本文阐述了相同的问题,并提供了一种与您已经在遵循的方法有些相似的方法(但阈值本质上是树节点的高度的百分比)。 基于此,以及我之前做过的那件事,这是我能找到的最佳方法,我认为您基本上已经步入正轨。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM