方法一:(略有缺陷)
在TreeView的整个树的DOUBLECLICK事件中判断选中节点,但是这个做法有缺点,就是选中一节点后,双击其他的空白地方也是会触发这个节点的双击事件。
方法二:(能够比较好的解决此类问题)
关键步骤:
1、根据鼠标位置得到当前活动节点。当然这一步得到的仍然可能在意料之外,因为TreeNode右边的空白位置算作它的区域。
2、判断鼠标的位置是否真的在节点上。可以引入一个成员变量来记录鼠标按下去或者弹起来的位置;也可以动态的抓取鼠标当前的绝对位置,然后使用TreeView控件的PointToClient方法换算成空间内部的相对位置,来看是否在节点范围内部。
2、判断鼠标的位置是否真的在节点上。可以引入一个成员变量来记录鼠标按下去或者弹起来的位置;也可以动态的抓取鼠标当前的绝对位置,然后使用TreeView控件的PointToClient方法换算成空间内部的相对位置,来看是否在节点范围内部。
private Point pi;
private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
pi=new Point(e.X,e.Y);
}
private void treeView1_DoubleClick(object sender, System.EventArgs e)
{
TreeNode node=this.treeView1.GetNodeAt(pi);
if(pi.X<node.Bounds.Left || pi.X>node.Bounds.Right)
{
this.Text="" ; //不触发事件
return;
}
else
{
this.Text="ggg"; //触发事件
}
}
private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
pi=new Point(e.X,e.Y);
}
private void treeView1_DoubleClick(object sender, System.EventArgs e)
{
TreeNode node=this.treeView1.GetNodeAt(pi);
if(pi.X<node.Bounds.Left || pi.X>node.Bounds.Right)
{
this.Text="" ; //不触发事件
return;
}
else
{
this.Text="ggg"; //触发事件
}
}
浙公网安备 33010602011771号