上个星期在使用TreeView的时候发现一个问题。假设TreeView中包含了多个根节点和子节点。如下图:
![](/images/blog_csdn_net/zhzuo/treeViewBug.jpg)
当在实例构造函数中或第一次使用他之前注册了TreeView.AfterSelect 事件,
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
下面为事件处理程序用来计算事件程序运行次数。
private int i = 0;
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
i++;
this.label1.Text = i.ToString();
}
(1).当第一次点击[节点1]时,i= 1;这个没有问题;如果第一次点击其他节点,比如[节点2]或[节点1.1],那i = 2,也就是选中一次节点产生了两个AfterSelect事件,对代码进行单步调试,发现第一次事件处理程序中的e.Node.Text值为”节点1”,也就是说第一次AfterSelect事件是由[节点1]产生(这里并没有点击该节点),而第二次的事件才是所想要的事件。
(2).针对这一点,笔者试着第一次点击节点前面的展开/折叠图标(+/-),无论点击的是不是第一个根节点,都会执行相当于选中了第一个根节点的事件。第一次调用this.treeView1.Select();函数时也会如此。
对于(1),在.net framework 2.0 beta2上测试了一下,已经没有发生两次事件的问题,那这是不是bug? 对于(2)笔者只是对自己提醒一下在不直接选择节点的情况下也会触发AfterSelect事件,在.net framework 2.0 beta2测试结果是一样的。