[这是之前发布的问题的更新版本,之前的标题是Selecting node by index in Delphi's Virtual Treeview。]
在一天的大部分时间之后,我相信我已经让 Virtual Treeview 组件(功能强大但复杂)以简单的两表数据感知方式工作。
现在,我试图简单地选择顶级节点的第 1,512 个(例如)。除了获取第一个顶级节点然后在循环中调用 GetNextSibling 1,511 之外,我看不到任何其他方法。
这似乎是不必要的。有没有更简单的方法?
更新
因为初始化我的树中的节点需要访问数据库,所以在启动时初始化所有节点是不可行的。当用户从没有选择记录的表单开始时,这很好。当用户在树中滚动时,会填充足够的节点以将当前窗口显示到树中,并且性能很好。
当用户以对话模式启动表单并选择了数据库记录时,我必须在用户看到表单之前将树推进到该节点。这是一个问题,因为如果记录在树的末尾,我从第一个节点遍历树可能需要十秒钟。每次我可以 GetNextSibling() 时,都会初始化一个节点,即使这些节点中的绝大多数都没有显示给用户。我更愿意将这些节点的初始化推迟到它们对用户可见的点。
我知道必须有更好的方法,因为如果我在没有选择记录的情况下打开树并使用垂直滚动条在一次操作中移动到树的中间,则无需初始化即可显示正确的节点我跳过的节点。
这是我在打开选择了记录的树时想要达到的效果。我知道我想去的节点的索引,但是如果我不能通过索引到达那里,我可以在树上进行二进制搜索,假设我可以前后跳转一些节点(类似于直接滚动到树的中间)。
或者,也许我可以对树视图进行一些状态设置,这将使我在遍历网格时未初始化中间节点。我已经尝试过开始/结束更新,但这似乎没有奏效。