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

来源:互联网 发布:微交易系统源码破解版 编辑:程序博客网 时间:2024/05/13 10:09

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

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


直接上:

效果图

             



数据表结构


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();        }        /// <summary>        /// 节点右键事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        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;            }        }        /// <summary>        /// 菜单选项单击事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        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("这里是删除事件,比如弹出窗口");            }        }        /// <summary>        /// 递归根节点        /// </summary>        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);//递归子节点,传递根节点            }        }        /// <summary>        /// 递归子节点        /// </summary>        /// <param name="tn"></param>        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);//递归子节点的子节点            }        }    }

0 0
原创粉丝点击