1

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

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

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

这工作正常,除了一种情况:当用户*在一个节点上按下(星号)时,这将加载许多嵌套节点,依此类推。由于上面的代码,我得到了一个闪烁的树视图,并带有一个正在运行的滚动条。

我想,当所有子节点都被扩展时,一个节点的扩展ExpandAll(这就是这样*做的)结束,但这是错误的。

我想知道,有没有办法在按下*时检测扩展结束TreeView

4

2 回答 2

0

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

于 2013-03-28T01:34:29.490 回答
0

你能不能检测到*键在最顶层的节点上被按下并编写一个递归函数循环遍历所有子节点,如果这些子节点有更多的子节点,再次调用相同的函数,依此类推,直到所有节点最上面的节点下方已展开。这将在按下(并检测到)键 * 时扩展所有正在扩展的节点,并且它仍将处理您的延迟加载。

于 2013-03-27T13:12:29.063 回答