Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET 2.0 C#Treeview在TreeNodes中拖放_C#_.net_Treeview_Drag And Drop_Nodes - Fatal编程技术网

.NET 2.0 C#Treeview在TreeNodes中拖放

.NET 2.0 C#Treeview在TreeNodes中拖放,c#,.net,treeview,drag-and-drop,nodes,C#,.net,Treeview,Drag And Drop,Nodes,我感兴趣的是捕获一个拖放事件,该事件将从用户拖动TreeView中某个现有的TreeNode开始。当用户拖动树节点时,我感兴趣的是在两个树节点之间拖动节点的时间。当用户执行此操作时,我希望在树节点之间显示一个哈希标记,以指定节点是作为子节点还是作为兄弟节点在节点中删除。此哈希标记将显示以下任一项: -在目标节点下方(表示源节点将作为目标节点的子节点丢弃) 或 -在目标节点下方左侧(表示源节点将作为目标节点的同级节点删除),在 我在使用DragOver事件方面取得了一些进展。我正在计算鼠标位置,并

我感兴趣的是捕获一个拖放事件,该事件将从用户拖动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指定给指示操作的自定义光标