.Net 2005 TreeView控件的一个问题有哪些?
.NET Framework 2.0中为TreeView控件新增了一个事件:NodeMouseDoubleClick。该事件在MSDN中的介绍:
当用户使用鼠标双击TreeNode时发生。
命名空间:System.Windows.Forms
程序集:System.Windows.Forms(在system.windows.forms.dll中)
语法
C#
publiceventTreeNodeMouseClickEventHandlerNodeMouseDoubleClick
备注
此事件在用户使用鼠标双击树节点的任何部分时发生,包括指示节点是折叠还是展开的加号(+)和减号(-)。
来看看TreeNodeMouseClickEventHandler的定义:
TreeNodeMouseClickEventHandler委托
注意:此委托在.NETFramework2.0版中是新增的。
表示将处理TreeView的NodeMouseClick和NodeMouseDoubleClick事件的方法。
命名空间:System.Windows.Forms
程序集:System.Windows.Forms(在system.windows.forms.dll中)
语法
C#
publicdelegatevoidTreeNodeMouseClickEventHandler(
Objectsender,
TreeNodeMouseClickEventArgse
参数
sender
事件源。
e
包含事件数据的TreeNodeMouseClickEventArgs。
注意:此委托在.NETFramework2.0版中是新增的。
表示将处理TreeView的NodeMouseClick和NodeMouseDoubleClick事件的方法。
命名空间:System.Windows.Forms
程序集:System.Windows.Forms(在system.windows.forms.dll中)
语法
C#
publicdelegatevoidTreeNodeMouseClickEventHandler(
Objectsender,
TreeNodeMouseClickEventArgse
参数
sender
事件源。
e
包含事件数据的TreeNodeMouseClickEventArgs。
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