【问题标题】:.NET 2.0 C# Treeview Drag/Drop within TreeNodes.NET 2.0 C# Treeview 在 TreeNodes 中拖放
【发布时间】:2010-09-07 20:44:32
【问题描述】:

我有兴趣捕获一个拖放事件,该事件将从用户将现有 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)
            {
            }
        }

但是,这样做只会让人觉得很脏。我想知道是否有人知道更好的方法来做到这一点。

提前致谢!

【问题讨论】:

    标签: c# .net treeview drag-and-drop nodes


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      This article 表达了同样的问题,并提供了一种与您已经遵循的方法有些相似的方法(除了阈值本质上是树节点高度的百分比)。基于这一点,以及当我之前这样做时,这是我能找到的最佳方法这一事实,我认为你基本上走上了正轨。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-09
        • 1970-01-01
        • 2018-06-15
        • 2015-09-25
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多