4

如何使用 VirtualTreeView 组件检查节点是否可见(在屏幕上)?像这样的东西:

if not Grid.NodeVisible (Node) then
   Grid.ScrollIntoView (Node, True);

如果节点不可见,则应居中,但如果可见,则保持原位。

请注意,我不是在谈论节点的可见标志,而是在屏幕上的可见性。在我的情况下,该IsVisible物业总是返回。True

4

2 回答 2

3

我认为最接近的是GetDisplayRect()方法:

根据滚动、展开状态等确定给定节点覆盖的客户端坐标。如果找不到给定节点(因为其父节点之一已折叠或不可见),则返回一个空矩形。

不确定在节点“可见但不在视野”的情况下它会返回什么 - 您可能必须编写辅助函数来检查 VT 客户端矩形内返回的矩形...

于 2012-03-20T08:42:53.343 回答
0

IsVisible 属性仅在节点已被隐藏或未如您所见时才返回。查找节点是否在屏幕上的唯一方法是按照建议使用 GetDisplayRect,然后针对树视图的客户端矩形对其进行测试。

但是,如果我了解您要正确执行的操作,则 VirtualTreeView 的 SelectionOption 中的 toCenterScrollIntoView 选项将为您提供所需的行为,而无需测试节点是否在可见区域中。

即(C++):

TreeView->TreeOptions->SelectionOptions =
TreeView->TreeOptions->SelectionOptions << toCenterScrollIntoView ;
...
ScrollIntoView(Node);
于 2012-04-05T23:30:58.340 回答