WinForm递归获取树形菜单及右键菜单

第一篇博客,有不到之处和抄袭嫌疑还请海涵,都是项目时累计的经验,本人新手,之前从未接触计算机语言,偶然机会下学了半年。现在上班半年,开发路上还有很多需要学习的地方,在这里希望多多认识各路老师,多多指教!趁着周末,闲极无聊就写写博客,混个面熟,也许也还能帮助别人...何乐不为?

此代码段是从一次项目中,拖动节点保存到任意节点下的片段。开发时所用的控件为Telerik控件包,此Demo没有使用到,代码也是简化版,如果有朋友需要借鉴可发邮件或者微信索取...


直接上:

效果图

             WinForm递归获取树形菜单及右键菜单_第1张图片



数据表结构

WinForm递归获取树形菜单及右键菜单_第2张图片


Code

public partial class Form1 : Form
    {
        //数据库对象
        DBConsts db = new DBConsts();
        //利用DataTable递归
        private DataTable dt;
        public Form1()
        {
            InitializeComponent();
            //树形菜单节点右键事件
            this.treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);
            //获取数据
            dt = db.GetTable();
            //递归
            GetRootNode();
        }
        /// 
        /// 节点右键事件
        /// 
        /// 
        /// 
        void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            //是否单击右键
            if (e.Button == MouseButtons.Right)
            {
                //初始化菜单
                ContextMenuStrip cm = new ContextMenuStrip();
                //菜单选项
                string[] menuItem = { "增加", "修改", "删除" };
                //循环添加菜单选项
                for (int i = 0; i < menuItem.Length; i++)
                {
                    cm.Items.Add(menuItem[i]);
                }
                //菜单选项单击事件
                cm.ItemClicked += new ToolStripItemClickedEventHandler(cm_ItemClicked);
                //绑定菜单选项到树形菜单
                this.treeView1.ContextMenuStrip = cm;
            }
        }

        /// 
        /// 菜单选项单击事件
        /// 
        /// 
        /// 
        void cm_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            //判断是否选项为空(没试过,也许多余)
            if (e.ClickedItem == null) return;
            //判断选择项值
            if (e.ClickedItem.Text == "增加")
            {
                MessageBox.Show("这里是添加事件,比如弹出窗口");
            }
            else if (e.ClickedItem.Text == "修改")
            {
                MessageBox.Show("这里是修改事件,比如弹出窗口");
            }
            else if (e.ClickedItem.Text == "删除")
            {
                MessageBox.Show("这里是删除事件,比如弹出窗口");
            }
        }

        /// 
        /// 递归根节点
        /// 
        public void GetRootNode()
        {
            int rootNodeId = 0;//根节点ID
            DataRow[] rows = dt.Select("parent_node_id=" + rootNodeId + "");//找到匹配根节点ID的数据项
            TreeNode tn = null;//声明树形菜单
            //遍历根节点
            foreach (DataRow dr in rows)
            {
                tn = new TreeNode();//实例化
                tn.Tag = dr;//将节点属性绑定到Tag
                tn.Text = dr["node_name"].ToString();//节点显示内容
                tn.Name = dr["node_id"].ToString();//节点Name值
                this.treeView1.Nodes.Add(tn);//添加节点到树形菜单
                GetChildNode(tn);//递归子节点,传递根节点
            }
        }

        /// 
        /// 递归子节点
        /// 
        /// 
        public void GetChildNode(TreeNode tn)
        {
            DataRow dr = (DataRow)tn.Tag;//获取节点
            int parentNodeId = (int)dr["node_id"];//定义节点编号
            DataRow[] rows = dt.Select("parent_node_id=" + parentNodeId + "");//查找匹配节点
            //遍历子节点
            foreach (DataRow item in rows)
            {
                TreeNode tnode = new TreeNode();//实例化新节点
                tnode.Tag = item;
                tnode.Text = item["node_name"].ToString();
                tnode.Name = item["node_id"].ToString();
                tn.Nodes.Add(tnode);//将新节点添加到旧节点下
                GetChildNode(tnode);//递归子节点的子节点
            }
        }
    }

你可能感兴趣的:(WinForm,winform,树形菜单,节点右键菜单)