解决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();

}

时间: 2024-11-05 19:29:22

解决treeview的同一节点单击多次的执行问题的相关文章

WPF TreeView 选择事件执行两次,获取TreeView的父节点的解决方法

1.TreeView选择事件执行两次 Very often, we need to execute some code in SelectedItemChanged depending on the selected TreeViewItem. ButSelectedItemChanged is called twice. This is due to stealing focus from the main window, which is screwing something up. Wha

TreeView 查找指定节点

/// <summary> /// 查找指定节点 /// </summary> /// <param name="tnParent">节点</param> /// <param name="strValue">值</param> /// <returns></returns> private TreeNode FindNode(TreeNode tnParent, str

WinForm控件TreeView 只部分节点显示 CheckBox

WinForm控件TreeView 只部分节点显示  CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示checkbox哪些不显示,可是winform中的treeview只提供一个ShowCheckBoxes 属性,要么全部节点显示checkbox,要不全部不显示,而指定节点没有ShowCheckBox 属性,下面就在winform的treeview中实现BS对应CheckBox 属性的功能  方法1: a) 

TreeView获取子节点

1 if (e.Node.Parent!=null)//如果存在父节点 2 { 3 MessageBox.Show(e.Node.Text);//就显示当前选中的 4 } TreeView获取子节点

C# TreeView 拖拽节点到另一个容器Panel中简单实现

C# TreeView 拖拽节点到另一个容器Panel中简单实现 用了这么久C#拖拽功能一直没有用到也就没用过,今天因为项目需要,领导特地给我简单讲解了下拖拽功能,真是的大师讲解一点通啊.特地写一篇博客记录下,分享给大家!也方便以后自己查看. 1.拖拽功能分析 拖拽功能分析其实就三个字:选-->拖-->放  什么意思,请看下图 本图大概就是将左侧TreeView中的节点拖拽到右侧的Panel控件中,然后根据业务处理想要的效果 拖拽过程分为三步: 将左侧的TreeView的节点选中 拖拽选中的节

C#界面之为TreeView上任意子节点添加Click事件

 PanPen120在CSDN上原创,如其他网站转载请注意排版和写明出处: http://write.blog.csdn.net/postlist 主要解决的问题:WinForm中用到树TreeView控件,想要点选任意节点有Click事件,但是发现点击子节点没有进入代码弹出Click事件 因为有事,现在有点晚了,直接上刚刚给自己写好的Demo

C#中TreeView选中父节点同时选中所有的子节点

TreeView 通常和CheckBoxs一起使用,显示并选择一些条目,特别是在等级分割的状态下,例如 当我选择一个父节点,希望该父节点下所有的子节点都被选中,取消一个节点,希望他所有的父节点都取消,例如 代码如下所示 //取消节点选中状态之后,取消所有父节点的选中状态 private void setParentNodeCheckedState(TreeNode currNode, bool state) { TreeNode parentNode = currNode.Parent; par

TreeView 树菜单 节点

<1>TreeView树的基本操作 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TreeVie

C# Winform中如何禁用TreeView的某个节点

转载处:http://shancheng2007.blog.163.com/blog/static/496838952010111452015761/ 没找到如何禁用某个节点的直接方法,所以就把要禁用的节点ForeColor设成灰色的然后在TreeView的BeforeSelect, BeforeCheck事件里根据节点颜色判断,如果是灰色的,则不让用户选中该节点 参考代码如下 using System.Drawing; //禁用第一个节点  treeView1.Nodes[0].ForeCol