Winform开发常用控件之TreeView菜单导航和权限用法

摘要:
下面先介绍一个简单的菜单用法1、TreeView节点的设置和选取节点TreeView静态节点的设置方法很简单,主要用在软件的快捷导航中。设置好节点后,就可以写节点的事件了,贴代码//////树形目录菜单////////////AfterSelect事件是点击节点时的事件privatevoidMenutreeView_AfterSelect{stringnodeselect=MenutreeView.SelectedNode.Name;switch{case"用户管理":ShowUsermanager();break;case"竞赛项目管理":ShowItemFrm();break;case"参赛单位管理":ShowDepartFrm();break;case"运动员信息":ShowMemberInfoFrm();break;case"代表队名单":ShowMatchTeamFrm();break;case"随机分组":ShowRandomGroupFrm();break;case"分组信息":ShowGroupInfoFrm();break;case"评分管理":ShowPointFrm();break;case"成绩管理":ShowScoreFrm();break;default:break;}}看到了吧,还是比较简单,case到以后,执行相应的方法即可,本例中主要是show一些窗口。

TreeView一个很棒的控件,我们在做WEB开发时常常犯困的一个东东。当然这里介绍winform里面的用法唠。

先介绍几个属性吧,CheckBoxes设置为true的话树形节点前面会出现checkbox勾选框、ImageList绑定树形里面的图标(界面上放一个Imgelist控件,绑定上即可)、ShowLines(树形展开时显示线条)等等

哦,这个方法好,this.MenutreeView.ExpandAll();即Treeview加载后全部展开。

下面先介绍一个简单的菜单用法

1、TreeView节点的设置和选取节点

TreeView静态节点的设置方法很简单,主要用在软件的快捷导航中。贴图,可以设置多级节点,每个节点设置Name和Text属性即可,如果觉得不美观,可以放一些图标。

本例中的图标是用ImageList绑定到里面的,还是比较简单。

Winform开发常用控件之TreeView菜单导航和权限用法第1张

设置好节点后,就可以写节点的事件了,贴代码

 /// <summary>
        ///树形目录菜单
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// AfterSelect事件是点击节点时的事件
        private void MenutreeView_AfterSelect(objectsender, TreeViewEventArgs e)
        {
            string nodeselect =MenutreeView.SelectedNode.Name;
            switch(nodeselect)
            {
                case "用户管理": ShowUsermanager(); break;
                case "竞赛项目管理": ShowItemFrm(); break;
                case "参赛单位管理": ShowDepartFrm(); break;
                case "运动员信息": ShowMemberInfoFrm(); break;
                case "代表队名单": ShowMatchTeamFrm(); break;
                case "随机分组": ShowRandomGroupFrm(); break;
                case "分组信息": ShowGroupInfoFrm(); break;
                case "评分管理": ShowPointFrm(); break;
                case "成绩管理": ShowScoreFrm(); break;
                default: break;

            }
        }

看到了吧,还是比较简单,case到以后,执行相应的方法即可,本例中主要是show一些窗口。

2、TreeView动态绑定及获取勾选值

这里介绍一个权限的示例,本例是将选中的节点放置在listbox中

上图Winform开发常用控件之TreeView菜单导航和权限用法第2张拿到了text和name两个值

      private voidBindTreeView()
        {
            treeView1.LabelEdit = false;//不可编辑
            //添加结点
            TreeNode root = newTreeNode();
            root.Text = "根节点";
            root.Name = "All";
            //一级
            TreeNode node1 = newTreeNode();
            node1.Text = "新增";
            node1.Name = "Add";
            TreeNode node2 = newTreeNode();
            node2.Text = "编辑";
            node2.Name = "Edit";
            //二级
            TreeNode node11 = newTreeNode();
            node11.Text = "新增管理员";
            node11.Name = "AddManager";
            TreeNode node12 = newTreeNode();
            node12.Text = "新增普通用户";
            node12.Name = "AddUser";
            TreeNode node21 = newTreeNode();
            node21.Text = "编辑管理员";
            node21.Name = "EditManager";
            TreeNode node22 = newTreeNode();
            node22.Text = "编辑普通用户";
            node22.Name = "EditUser";
            //二级加入一级
node1.Nodes.Add(node11);
            node1.Nodes.Add(node12);
            node2.Nodes.Add(node21);
            node2.Nodes.Add(node22);
            //一级加入根
root.Nodes.Add(node1);
            root.Nodes.Add(node2);
            //
treeView1.Nodes.Add(root);
        }

        private void button1_Click(objectsender, EventArgs e)
        {            
            foreach (TreeNode node in treeView1.Nodes)//实际上treeVIew1里面只有1个根节点,所以要用递归方法
{
                SetTreeViewList(node);
            }           
        }
        //递归方法
        private voidSetTreeViewList(TreeNode node)
        {
            if(node.Checked)
            {
                listBox1.Items.Add(node.Text + "&" +node.Name);
            }
            if (node.Nodes.Count > 0)
            {
                foreach (TreeNode cnode innode.Nodes)
                {                    
                    SetTreeViewList(cnode);//递归
}
            }           
        }

由于Treeview遍历只能拿到一个根节点(这点大家可以做实验看看),因此必须使用递归才能找到其他子节点,下面再补充一点就是子节点全部选中后父节点自动选中,父节点选中后子节点全部选中

贴代码,下面这段接着上面的即可

 //勾选的事件,必须写在AfterCheck事件中
        private void treeView1_AfterCheck(objectsender, TreeViewEventArgs e)
        {
            if (e.Action == TreeViewAction.ByMouse)//这句还是比较重要哦,如果没有的话就会陷入死循环
{
                if(e.Node.Checked)
                {
                    //选中其子节点
                    setChildNodeCheckedState(e.Node, true);
                    //如果有父节点,选中其所有父节点
                    if (e.Node.Parent != null)
                    {
                        setParentNodeCheckedState(e.Node, true);
                    }
                }
                else{
                    //取消其子节点
                    setChildNodeCheckedState(e.Node, false);
                    //取消其所有父节点
                    if (e.Node.Parent != null)
                    {
                        setParentNodeCheckedState(e.Node, false);
                    }
                }
            }
        }
        //子节点递归
        private void setChildNodeCheckedState(TreeNode currNode, boolstate)
        {
            TreeNodeCollection nodes =currNode.Nodes;
            if (nodes.Count > 0)
                foreach (TreeNode tn innodes)
                {
                    tn.Checked =state;
                    setChildNodeCheckedState(tn, state);
                }
        }
        //父节点递归
        private void setParentNodeCheckedState(TreeNode currNode, boolstate)
        {
            TreeNode parentNode =currNode.Parent;
            parentNode.Checked =state;
            if (currNode.Parent.Parent != null)
            {
                setParentNodeCheckedState(currNode.Parent, state);
            }
        }

上个图,看下效果

Winform开发常用控件之TreeView菜单导航和权限用法第3张

如此之类的做法可以直接将权限做到窗口的按钮上,然后自己写一个基类Form根据权限来判断菜单、按钮是否显示、是否可用等,所有的窗体继承自这个基类窗体就可以实现一劳永逸的权限控制了。具体示例有时间了奉上。

免责声明:文章转载自《Winform开发常用控件之TreeView菜单导航和权限用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇adb shell dumpsys meminfo 详解easyui 只刷新当前页面的数据 datagrid reload 方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Winform中使用控件名来查找窗体或者容器中的控件

在项目中经常遇到要动态生成控件,动态显示指定的控件或者隐藏,这就要涉及到查找控件的问题。 下面介绍下Winform中使用控件名来查找窗体或者容器中的控件的方法,代码如下: /// <summary>/// 通过控件名获取控件/// </summary>/// <param name="strName"></para...

WinForm窗体程序中使用CefSharp获取加载后的资源、截取request参数、拦截response数据、注入jquery文件和js代码(4)-注入jquery文件和js代码

源码地址:源代码csdn  或者底部qq问我要 六、注入jquery文件和js代码 在界面button按钮点击事件中 private void button1_Click(object sender, EventArgs e) { //注入本机binx86debug下的文件 browser.E...

Delphi学习笔记(精华二)

RichEdit1.ScrollBars 选择滚动条,ssNone[无],ssHorizontal[只有水平],ssVertical[只有垂直],ssBoth[同时有水平和垂直]RichEdit1.SelStart RichEdit1.SelLength 选中文本的起始位置和长度RichEdit1.SelText 选中的文本FindDialog.Find...

C#客户端(WinForm)开机自动启动实现

/// <summary> ///修改程序在注册表中的键值 /// </summary> /// <param name="isAuto">true:开机启动,false:不开机自启</param> private voi...

winform小结

窗体是程序与用户交互的可视界面,窗体也是对象,窗体类定义了生成窗体的模版,实例化一个窗体类就产生了一个窗体。 .NET框架类库的System.Windows.Forms命名空间中定义的Form类是所有窗体类的基类。 1、常用属性 属性:图标、标题、位置、背景等可在窗体属性面板设置,也可以代码实现。 (1)Name属性:用来获取或设置窗体的名称,在应用程序中...

WinForm 创建与读写配置文件

1. 创建 app.config 文件:右击项目名称,选择“添加”→“添加新建项”,在出现的“添加新项”对话框中,选择“添加应用程序配置文件”;如果项目以前没有配置文件,则默认的文件名称为“app.config”,单击“确定”。 出现在设计器视图中的app.config文件为: <?xml version="1.0" encoding="utf...