.Net 2005 TreeView控件的一个问题有哪些?
.NET Framework 2.0中为TreeView控件新增了一个事件:NodeMouseDoubleClick。该事件在MSDN中的介绍:












来看看TreeNodeMouseClickEventHandler的定义:






















TreeNodeMouseClickEventHandler要处理单击和双击两个事件的委托,区分单击和双击的依据是TreeNodeMouseClickEventArgs类的Clicks属性,单击Clicks=1,双击Clicks=2。
TreeNodeMouseClickEventArgs类还有一个Node属性,用来获取被单击的节点。
DobuleClick其实是两次Click,理论上双击一个Node发生的两次Click都应该针对这个Node,但事实并非如此。问题在于双击Node会展开触发展开和折叠,还有自动滚动。
双击Node后,如果Node包含子节点,TreeView触发展开或折叠,如果无法在控件可见区域显示全部Node,还会自动设置滚动位置。事件处理的过程似乎是这样的:
1、第一次Click
2、第二次Click的MouseDown,触发展开或折叠,设置滚动位置
3、第二次Click的MouserUp,获取Click的Node,构造TreeNodeMouseClickEventArgs参数。获取Click的Node是根据MouseUp时的鼠标位置,而这时可能发生了滚动,鼠标位置指向的Node已不是第一次Click时点击的Node了。


所以,在NodeMouseDoubleClick事件的TreeNodeMouseClickEventArgs参数中,Node属性很可能不是DoubleClick的Node。在处理NodeMouseDoubleClick事件时,应该使用Treeview.SelectedNode而不使用e.Node。
本文地址:http://www.45fan.com/dnjc/70327.html