如何防止某个虚拟StringTree节点被拖拽



我想要完成的事情

我有一个虚拟的字符串树与子级别行,可以由用户扩展。所有节点的顶层层次都应该是可拖动的。但所有子节点级别都不能。

如何测试

为了测试,我使用了当前Virtual TreeView修订的高级演示项目。第二个演示(一般能力和特性)有足够的节点层次结构,您可以拖动节点。

考虑

我想我可以通过使用stringtree的OnDragAllowed事件来完成我的任务,但当我拖动时它不会被触发。我的意图是在拖动开始之前检查节点级别(GetNodeLevel),并且只允许拖动顶级节点级别0。

如何防止虚拟字符串树的某些节点级别被拖动?

为了得到一个答案…

为了防止某个节点级别被拖拽,我们可以实现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的文章中描述了拖放的基础知识和含义。

相关内容

  • 没有找到相关文章

最新更新