TVirtualStringTree。如何通过一次确认检查节点及其子节点?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TVirtualStringTree。如何通过一次确认检查节点及其子节点?相关的知识,希望对你有一定的参考价值。
我有TVirtualStringTree
类型的组件。选项toCheckSupport
已启用。还启用了与检查状态传播相关的选项,因为需要传播。我想实现检查一个带有确认的节点(“你确定要检查......?”)。不幸的是,如果启用了传播选项,则会触发事件OnCheck
和OnChecking
,包括子节点。因此,将消息放入事件过程会使其重复显示。您是否知道如何通过单个确认检查节点及其子节点?
我想到了手动检查,即用户想要检查树中的节点(以及因此所有节点的后代)并且仅被要求确认一次。如果用户想要检查叶子,则使用确认进行检查很简单:将节点恢复到先前状态就足够了。
procedure TMyForm.VSTChecked(Sender: TBaseVirtualTree; Node: PVirtualNode);
begin
if Node.CheckState = csCheckedNormal then
begin
if not VST.HasChildren[Node] then
begin
if MessageDlg('Are you sure you want to check?', mtConfirmation,
mbYesNo, 0) <> mrYes then
begin
Node.CheckState := csUncheckedNormal;
PropagateCheckState(VST, Node); // From Node's parent to the root
end;
end;
end;
end;
我考虑使用OnNodeClick
来识别用户检查的确切节点,并且(在我的应用程序中,重要数据在叶子中)关于记住叶子的先前检查状态以便恢复它们。它会导致一个很好的解决方案吗?
使用OnMouseDown
事件获得有关鼠标单击的通知。如果它是TMouseButton.mbLeft
调用GetHitTestInfoAt()
并检查THitPositions.ctCheckBox
中是否包含THitInfo.HitPositions
is。如果是这样,THitInfo.HitNode
con对应相应的节点。然后,您可以显示确认对话框并将结果保存在成员变量中,您可以在OnChecking事件中使用该变量来允许或禁止更改检查状态。
以上是关于TVirtualStringTree。如何通过一次确认检查节点及其子节点?的主要内容,如果未能解决你的问题,请参考以下文章
TVirtualStringTree - 如何在单击所选行的任何区域时启用拖动?
如何在TVirtualStringTree中自动调整跨越列的大小?