【问题标题】:Prevent drag drop on child nodes of DotNetBar AdvTree/TreeControl防止在 DotNetBar AdvTree/TreeControl 的子节点上拖放
【发布时间】:2012-09-07 10:41:46
【问题描述】:

我正在使用 DotNetBar Advtree 组件实现 TreeControl。但是,我似乎很难找到使特定节点不可能有任何子节点的属性。我想在下面停止以下内容;

例如,RSS 提要不能包含在 RSS 提要中。实际上,我希望某些节点可以拖动,并且可以有子节点,而其他节点只能拖动。

感谢您的帮助。我注意到我设置为 -1 或 5000 的属性 NodesIndent 但都没有任何帮助。

【问题讨论】:

  • atkon 链接的文档似乎建议您订阅 NodeDragFeedback 事件或 BeforeNodeDrop 事件并取消操作如果它是无效位置
  • 是的,这就是我正在努力解决的问题。我对树上的每个节点都有不同的节点类型,将它们与 NodeDragFeedback 进行比较可以正常工作,但我无法重新排序节点以找到不同的方式;阻止节点生成子节点。

标签: c# treecontrol dotnetbar


【解决方案1】:

根据http://www.devcomponents.com/kb2/?p=327,有一个 DragDropEnabled 属性可以控制这个。如果这不起作用,请处理 BeforeNodeDragStart 事件并取消拖动。

[编辑:添加以下内容]

为防止将某个节点拖到某些节点下而不是其他节点下,请处理 BeforeNodeDrop 事件并在被拖曳的节点无法作为子节点添加到目标节点时设置 Cancel=true。

【讨论】:

  • 我已经弄清楚如何启用/禁用特定的树节点被拖动,但我想要声明某些节点可以有子节点而其他节点不能。
  • @wonea 我在答案中添加了更多信息。这有帮助吗?
  • 是的,我做了一个类型比较。不同类型的派生节点,例如 RSSNode : Node 和 InboxNode : Node。这很好,但由于我无法重新排序节点,它会掉下来,所以我唯一的选择似乎是以某种方式禁用子放置。
【解决方案2】:

刚刚在文档中发现;

“获取或设置被拖动节点在 NewParentNode.Nodes 集合内的新插入位置。如果 InsertPosition 为 -1,则 ParentNode 指的是当前鼠标悬停的节点,拖放节点将作为子节点添加到该节点。”

所以基本上我可以捕获它是否被添加为子节点,比较节点类型并决定是否接受丢弃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多