VirtualStringTree过滤正确完成

问题描述 投票:1回答:1

我正在寻找一种quick方法,以根据过滤规则(特别是当过滤规则更改时)过滤VirtualStringTree中的节点。>。 VST中内置了一种过滤器机制,您可以在其中定义是否将节点过滤掉。

我的解决方案

现在是确定节点初始化时是否将节点过滤掉。当过滤器更改时,我将遍历所有初始化的节点,并根据需要更改过滤器状态。

问题

是初始化的节点越多,遍历它们所需的时间就越长。窗口外有许多不需要过滤器信息的节点现在(虚拟范例)。

问题

,是否有像过滤器失效系统/过滤器事件/其他解决方案之类的东西,只能触摸真正需要“过滤器已更改”信息的节点?procedure TfrmMain.vstInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); var Data: PMyDataType; begin Data := Sender.GetNodeData(Node); Data^ := GetData(Node.Index); if IsNodeFiltered(Data^) then Include(InitialStates, ivsFiltered); end; procedure TfrmMain.OnFilterRuleChanged(); var Node: PVirtualNode; Data: PMyDataType; begin vst.BeginUpdate; try for Node in vst.InitializedNodes do begin Data := vst.GetNodeData(Node); vst.IsFiltered[Node] := IsNodeFiltered(Data^); end; finally vst.EndUpdate; end; end;

我正在寻找一种基于过滤规则来过滤VirtualStringTree中的节点的快速方法,尤其是当过滤规则更改时。 VST中内置了一个过滤器机制,您可以在其中定义...
delphi virtualtreeview tvirtualstringtree
1个回答
3
投票
没有一个失效系统“仅触摸真正需要“过滤器已更改”信息的节点”。为了显示正确的滚动条和所有节点的正确可扩展状态,如果所有初始化节点仍不显示,则需要检查它们。有了过滤器的工作原理,您就可以优化for循环中的内容并跳过某些节点。您也可以考虑使用vst.VisibleNodes而不是InitializedNodes,但是当节点展开时,还需要过滤。
© www.soinside.com 2019 - 2024. All rights reserved.