zoukankan      html  css  js  c++  java
  • WinForm 使用TreeView控件作为导航的 TreeNode(TreeView)点击事件(Click、DoubleClick ~)的一般做法

    在WinForm程序中,我们有时候会使用TreeView控件来作为系统的侧边栏的导航(图1),通常这些TreeNode项也是根据用户的权限来动态生成的,那么我们在这种情况下,又如何更好的处理TreeNode的点击事件呢?(Click、DoubleClick 等等)

    图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做一些弹出对话框的操作。

  • 相关阅读:
    Typescript类、命名空间、模块
    TypeScript 基础类型、变量声明、函数、联合类型、接口
    JS中的单线程与多线程、事件循环与消息队列、宏任务与微任务
    wangEditor上传本地视频
    java版excel转pdf,word转pdf
    idea2019.3 没有 Autoscroll from Source
    mysql 实现类似oracle函数bitand功能
    spring boot 配置文件动态更新原理 以Nacos为例
    spring boot 发布自动生成svn版本号
    spring boot JPA 数据库连接池释放
  • 原文地址:https://www.cnblogs.com/bruceleeliya/p/2859049.html
Copyright © 2011-2022 走看看