我有一个带有toFullRowSelect
的 VST(有几列(。我想在节点上启用拖放。
问题是,只有当您在节点标题上单击时,您才能开始拖动节点。 如果单击了行选择而不是节点标题,则拖动操作将不会启动,并且不会触发OnDragAllowed
。
MCVE 很简单。 在表单上放置一个TVirtualStringTree
(命名为VST
(,然后添加OnCreate
和OnDragAllowed
用于 VST:
procedure TForm1.FormCreate(Sender: TObject);
begin
VST.TreeOptions.SelectionOptions := VST.TreeOptions.SelectionOptions + [toFullRowSelect];
VST.RootNodeCount := 5;
end;
procedure TForm1.VSTDragAllowed(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean);
begin
Allowed := True;
end;
现在,如果单击节点标题,则会开始拖动操作,但如果尝试拖动所选节点的其他区域,则不会启动。
如何解决这个问题?谢谢。
将toFullRowDrag选项包含在MiscOptions选项集中:
procedure TForm1.FormCreate(Sender: TObject);
begin
VST.TreeOptions.SelectionOptions := VST.TreeOptions.SelectionOptions + [toFullRowSelect];
VST.TreeOptions.MiscOptions := VST.TreeOptions.MiscOptions + [toFullRowDrag];
VST.RootNodeCount := 5;
end;
toFullRowDrag选项在源代码中描述为:
通过单击其中的任意位置来启动节点拖动,而不是仅在 标题或图像。必须与 toDisableDrawChoice 一起使用。