BeforeExpand在Treeview中多次触发

时间:2011-12-29 05:55:55

标签: .net delegates treeview backgroundworker

我有一个严重烦人的问题,我花了很多时间试图解决,但仍无济于事!

多年来,我从未使用.NET附带的标准树视图,因为我一直使用第三方组件,但到目前为止谈论的是糟糕的体验!

简而言之,我正在加载我的驱动器,然后在扩展驱动器时,我列出了文件夹,等等......这里没什么新东西,但我遇到了两个主要问题:

  1. 当折叠所有分支时,它会触发两次展开前后事件.. BeforeExpand x 2,然后AfterExpand x 2.

  2. 当扩展多个分支时,它将为每个扩展分支触发事件2 ...就像我在调用某种递归代码时,我不是......例如,

  3. 展开C - >触发BeforeExpand x 2,然后AfterEvent x 2 - 保持扩展

    展开E - >触发BeforeExpand x 2代表E,然后触及AfterEvent x 2,然后再次为C - E展开。

    展开F - >触发BeforeExpand x 2代表F,然后触发AfterEvent x 2,然后再针对E然后C再做。

    没有意义!!

    代码明智:

    1. 在表单初始化时初始化BeforeExpand和AfterExpand,即

          treeView1.BeforeExpand += new TreeViewCancelEventHandler(treeView1_BeforeExpand);
          treeView1.AfterExpand += new TreeViewEventHandler(treeView1_AfterExpand);
      
    2. 当我展开节点时,会调用后台线程并加载驱动器或文件夹。从后台工作线程,我调用一个函数,通过再次调用委托来处理交叉线程问题,没什么特别的

    3. 我不知道导致这个问题的原因是它可能是MS方面的一个错误,但我对此表示怀疑......感觉这个问题太明显了。

      我很乐意在需要的时候发布我的代码,因为这只是我开始的一个虚拟测试应用程序,也许你会发现我做错了但我却看不到的东西。

      希望有人知道造成这种情况的原因。

      感谢。

      亨利。

1 个答案:

答案 0 :(得分:1)

我弄清楚问题是什么,所以我想我会分享它以防其他人发生这种情况!!

这很疯狂但是在后台工作线程中,我在RunWorkerCompleted中调用了treeview1.Sort(),这就是多次调用beforeExpand和afterExpand事件的原因!一旦删除,它就会表现出相应的行为。

我想我会首先对文件夹进行排序,然后从线程中提起委托以使用排序列表更新UI。

就是这样!