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

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

此代码段是从一次项目中,拖动节点保存到任意节点下的片段。开发时所用的控件为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();}/// /// 节点右键事件/// /// /// 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;//根节点IDDataRow[] rows = dt.Select("parent_node_id=" + rootNodeId + "");//找到匹配根节点ID的数据项TreeNode tn = null;//声明树形菜单//遍历根节点foreach (DataRow dr in rows){tn = new TreeNode();//实例化tn.Tag = dr;//将节点属性绑定到Tagtn.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);//递归子节点的子节点}}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部