我有一个严重烦人的问题,我花了很多时间试图解决,但仍无济于事!
多年来,我从未使用.NET附带的标准树视图,因为我一直使用第三方组件,但到目前为止谈论的是糟糕的体验!
简而言之,我正在加载我的驱动器,然后在扩展驱动器时,我列出了文件夹,等等......这里没什么新东西,但我遇到了两个主要问题:
当折叠所有分支时,它会触发两次展开前后事件.. BeforeExpand x 2,然后AfterExpand x 2.
当扩展多个分支时,它将为每个扩展分支触发事件2 ...就像我在调用某种递归代码时,我不是......例如,
展开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再做。
没有意义!!
代码明智:
在表单初始化时初始化BeforeExpand和AfterExpand,即
treeView1.BeforeExpand += new TreeViewCancelEventHandler(treeView1_BeforeExpand);
treeView1.AfterExpand += new TreeViewEventHandler(treeView1_AfterExpand);
当我展开节点时,会调用后台线程并加载驱动器或文件夹。从后台工作线程,我调用一个函数,通过再次调用委托来处理交叉线程问题,没什么特别的
我不知道导致这个问题的原因是它可能是MS方面的一个错误,但我对此表示怀疑......感觉这个问题太明显了。
我很乐意在需要的时候发布我的代码,因为这只是我开始的一个虚拟测试应用程序,也许你会发现我做错了但我却看不到的东西。
希望有人知道造成这种情况的原因。
感谢。
亨利。
答案 0 :(得分:1)
我弄清楚问题是什么,所以我想我会分享它以防其他人发生这种情况!!
这很疯狂但是在后台工作线程中,我在RunWorkerCompleted中调用了treeview1.Sort(),这就是多次调用beforeExpand和afterExpand事件的原因!一旦删除,它就会表现出相应的行为。
我想我会首先对文件夹进行排序,然后从线程中提起委托以使用排序列表更新UI。
就是这样!