WinForm 使用TreeView控件作为导航的 TreeNode(TreeView)点击事件(Click、DoubleClick ~)的一般做法
2013-01-13 23:45
316 查看
在WinForm程序中,我们有时候会使用TreeView控件来作为系统的侧边栏的导航(图1),通常这些TreeNode项也是根据用户的权限来动态生成的,那么我们在这种情况下,又如何更好的处理TreeNode的点击事件呢?(Click、DoubleClick 等等)
![](http://images.cnitblog.com/blog/40872/201301/13232732-8f87ef996d4441778b40e23d8b54c493.jpg)
图1
在TreeNode中有一个Tag的属性,类型为Object,通常我会巧妙的使用这个Tag来处理如上的点击事件。由于代码的实现比较简单,我就直接上代码了:代码1定义了NavNode类,定义了 Click() 和 DoubleClick() 方法;代码2中展示了如何实例化TreeNode并如何处理TreeNode的点击事件;
代码1
代码2
代码1中的 NavNode 除了定义成普通类,还可以定义成抽象类或是接口。如果你的子类还需要继承一些类似权限控管基类的话,那么将NavNode定义成INavNode会更好。而代码1中的NavNode中的Click,DoubleClick方法,如果不需要做默认的实现的话,可以定义成抽象方法。这里我定义成虚函数是因为有时候我需要在NavNode的Click,DoubleClick做一些弹出对话框的操作。
![](http://images.cnitblog.com/blog/40872/201301/13232732-8f87ef996d4441778b40e23d8b54c493.jpg)
图1
在TreeNode中有一个Tag的属性,类型为Object,通常我会巧妙的使用这个Tag来处理如上的点击事件。由于代码的实现比较简单,我就直接上代码了:代码1定义了NavNode类,定义了 Click() 和 DoubleClick() 方法;代码2中展示了如何实例化TreeNode并如何处理TreeNode的点击事件;
class NavNode { public virtual void Click() { } public virtual void DoubleClick() { } } class EmptyNode : NavNode { } //功能1 class Fun1Node : NavNode { public override void DoubleClick() { try { IndexForm indexForm = new IndexForm(); indexForm.Show(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
代码1
//TODO: 这里可以根据用户的权限,动态的生成菜单节点 TreeNode node = new TreeNode("首页"); node.Tag = new EmptyNode(); TreeNode nodeFun1 = new TreeNode("功能1"); nodeFun1.Tag = new Fun1Node(); node.Nodes.Add(nodeFun11); treeView1.Nodes.Add(node); treeView1.NodeMouseDoubleClick += (s, e) => { if (e.Button == System.Windows.Forms.MouseButtons.Left) { NavNode currentNode = (NavNode)e.Node.Tag; if (currentNode != null) { currentNode.DoubleClick(); } } };
代码2
代码1中的 NavNode 除了定义成普通类,还可以定义成抽象类或是接口。如果你的子类还需要继承一些类似权限控管基类的话,那么将NavNode定义成INavNode会更好。而代码1中的NavNode中的Click,DoubleClick方法,如果不需要做默认的实现的话,可以定义成抽象方法。这里我定义成虚函数是因为有时候我需要在NavNode的Click,DoubleClick做一些弹出对话框的操作。
相关文章推荐
- Winform 点击TreeView控件节点的CheckBox不触发NodeMouseClick事件的做法
- jquery使用("#id").click(function(){})点击事件失效的解决办法
- 使用ButterKnife方法,点击事件响应里面,执行performClick失效,不能再同一帧响应多个点击事件
- 在vue中无论使用router-link 还是 @click事件,发现都没法从列表页点击跳转到内容页去
- appium使用ID进行定位click点击事件
- 使用js动态添加点击事件时,click与onclick的区别
- PopupWindow中使用GridView无法响应OnItemClickListener点击事件
- 使用js动态添加点击事件时,click与onclick的区别
- (zepto插件使用)click、tap无效又能实现点击事件小窍门
- echart3 click点击事件使用
- 使用js动态添加点击事件时,click与onclick的区别
- VLC控件使用及点击事件响应
- iOS Safari 中click点击事件失效的解决办法
- VS2005 TreeView 的 CheckBox 被点击时的引发页面回发事件
- vb.net treeView的同一个节点第二次点击(连续),不执行事件
- treeview(winform)里如何用命令指定选中某一个节点,并引发afterselect事件?
- 使用Java自动化方法模拟Android手机点击、触屏事件
- 使用layout方法实现控件的移动并且不影响点击事件
- 在TextBox中点击回车时 触发指定按钮click事件的解决方案
- Extjs6.2系列之图片组件及click点击事件监听