是否可以隐藏VirtualStringTree中的特定节点? 我正在实现“过滤”功能(VST充当带列的列表),并且我希望每次更改过滤器时都避免重新加载内容 - 相反,更快的是告诉VST不要呈现特定项目。 ..任何解决方案?
答案 0 :(得分:16)
VirtualTree.IsVisible[Node] := False;
答案 1 :(得分:1)
使用.IsVisible []或.IsFiltered []存在问题,这是非常慢的,我在一个树中探测过滤器,其中有25,000个节点并且速度太慢。
我发现使用Include(Node.states,vsFiltered)或使用(Node.States,vsVisible)时,滚动条大小更快并解决了问题,它包含手动更改Node.TotalHeight值根据可见节点的数量(未过滤)。
例如,我正在过滤25,000个节点,我使用的代码如下:
procedure TFC_Articulo.Filtrar(Filtro:String);
var
Node:PVirtualNode;
Data:PArticulo;
begin
Node := TV.GetFirst;
TV.RootNode.TotalHeight:=TV.DefaultNodeHeight; // The Trick
while Assigned(Node) do
begin
Data:=TV.GetNodeData(Node);
Exclude(Node.States,vsFiltered); // By default all nodes wil be Visible
if ComparationHereForDetermineFiltering then
Include(Node.States,vsFiltered) // This node wil be filtered
else
Inc(TV.RootNode.TotalHeight,Node.NodeHeight); // Determine the Height of scrollbar
Node:=TV.GetNext(Node);
end;
TV.RootNode.TotalHeight:=TV.RootNode.TotalHeight+TV.BottomSpace;
TV.UpdateScrollBars(True);
end;
希望这会有所帮助 抱歉英语不好......