如何检测膨胀结束,当按下&;*&;;在树状视图

本文关键字:视图 何检测 检测 结束 膨胀 | 更新日期: 2023-09-27 18:06:11

我有一个控件,来自TreeView,它反映了一些分层数据并以惰性方式创建节点。
当一个特定的节点被扩展时,我检查,在它的Nodes集合中是否有一个虚拟节点,如果是,我删除它,从数据源加载数据并创建真正的子节点。

节点的数据加载被这样的结构包围:

Cursor = Cursors.WaitCursor;
BeginUpdate();
try
{
  // node.Nodes.Add(...)
}
finally
{
  EndUpdate();
  Cursor = Cursors.Default;
}

这很好,除了一种情况:当用户在节点上按*(星号)时,这将加载许多嵌套节点,等等。因为上面的代码,我得到一个闪烁的树视图,滚动条运行。

我认为,扩展一个节点与ExpandAll(这是什么*做)结束,当所有的子节点被扩展,但这是假的。

我想知道,在TreeView上按*的情况下,是否有方法检测扩展结束?

如何检测膨胀结束,当按下&;*&;;在树状视图

您是否可以检测到*键被按在最上面的节点上并编写递归函数,该函数循环遍历所有子节点,然后如果这些子节点有更多的子节点,则再次调用相同的函数,以此类推,直到最上面节点以下的所有节点都被展开。当按下键*(并检测到)时,它将扩展所有正在扩展的节点,并且它仍然会处理延迟加载。

在BeforeExpand事件中,您可以查看selectedNode的当前级别,如果它为零,则表示它是顶级节点。在这种情况下,您将创建新的子节点并查看它们是否包含其他节点,如果包含,则在其中添加一个虚拟节点。您的代码可能与您当前拥有的代码几乎相同,但用于第0级而不是第1级。