解决treeview的同一节点单击多次的执行问题
在使用treeview的AfterSelect函数的时候,单击同一节点多次无响应。
解决方法:
将首次单击的节点信息保存到selectTreeNode;
然后使用click函数,判断单击的节点是否和selectTreeNode一致。如果一致执行。
关键步骤:
1、根据鼠标位置得到当前活动节点。当然这一步得到的仍然可能在意料之外,因为TreeNode右边的空白位置算作它的区域。
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_Click(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
{ if(node.Text.Equals(selectTreeNode))
MessageBox.Show(node.Text); //触发事件
}
}
private void treeView1_AfterSelect_1(object sender, TreeViewEventArgs e)
{
selectTreeNode = e.Node.Text.ToString();
}