我想要实现的目标
我有一个虚拟字符串树,其中包含可由用户扩展的子级别行。所有节点的顶层应可拖动。但任何子节点级别都不应是。
如何测试
为了进行测试,我使用当前 Virtual TreeView 修订版的高级演示项目。第二个演示(一般能力和功能)具有足够的节点层次结构,您可以四处拖动节点。
考虑
我以为我可以通过使用 stringtree 的 OnDragAllowed
事件来完成我的任务,但当我拖动时它不会被触发。
我的目的是在拖动开始之前检查节点级别 (GetNodeLevel
),并且只允许拖动顶部节点级别 0。
如何防止虚拟字符串树的某些节点级别被拖动?
最佳答案
为了得到答案......所有功劳都归于 TLama 。
为了防止某个节点级别被拖动,我们可以实现 OnDragAllowed
事件处理程序,并确保将 StringTree 的 DragMode
设置为 dmManual
。
这是事件处理程序。
procedure TForm1.vstDragAllowed(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; var Allowed: Boolean);
begin
{ dragging shall only be possible for top nodes (level 0) }
Allowed := TVirtualStringTree(Sender).GetNodeLevel(Node) = 0;
end;
拖放的基础知识和含义在此 Delphi About.com article 中进行了描述。
关于delphi - 如何防止某个Virtual StringTree NodeLevel被拖拽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531459/