.Net 2005 TreeView控件的一个问题

本文解析了.NET Framework 2.0中TreeView控件的NodeMouseDoubleClick事件工作原理及注意事项,详细介绍了如何通过TreeNodeMouseClickEventArgs区分单击与双击,并正确处理双击事件。
.NET Framework 2.0中为TreeView控件新增了一个事件:NodeMouseDoubleClick。
该事件在MSDN中的介绍:

当用户使用鼠标双击 TreeNode 时发生。 

命名空间:System.Windows.Forms
程序集:System.Windows.Forms(在 system.windows.forms.dll 中)
语法
C# 
public event TreeNodeMouseClickEventHandler NodeMouseDoubleClick

备注
此事件在用户使用鼠标双击树节点的任何部分时发生,包括指示节点是折叠还是展开的加号 (
+) 和减号 (-)。

 来看看TreeNodeMouseClickEventHandler的定义:
TreeNodeMouseClickEventHandler 委托 
注意:此委托在 .NET Framework 
2.0 版中是新增的。 

表示将处理 TreeView 的 NodeMouseClick 和 NodeMouseDoubleClick 事件的方法。 

命名空间:System.Windows.Forms
程序集:System.Windows.Forms(在 system.windows.forms.dll 中)

语法
 
C# 
public delegate void TreeNodeMouseClickEventHandler (
    Object sender,
    TreeNodeMouseClickEventArgs e


参数
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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值