C# 用树形列表 动态 显示菜单
如图

页面加载
private void Form1_Load(object sender, EventArgs e)
{
GetMenu(treeView1, menuStrip1);//将menuStrip1控件中的信息添加到treeView1控件中
} /// <summary>
/// 将MenuStrip控件中的首行命令项添加到TreeView控件中
/// </summary>
/// <param treeV="TreeView">TreeView控件</param>
/// <param MenuS="MenuStrip">MenuStrip控件</param>
public void GetMenu(TreeView treeV, MenuStrip MenuS)
{
bool Var_Bool = true;
for (int i = 0; i < MenuS.Items.Count; i++) //遍历MenuStrip组件中的一级菜单项
{
//将一级菜单项的名称添加到TreeView组件的根节点中,并设置当前节点的子节点newNode1
TreeNode newNode1 = treeV.Nodes.Add(MenuS.Items[i].Text);
if (MenuS.Items[i].Enabled == false)//判断当前项是否为可用
{
newNode1.ForeColor = Color.Silver;//改变树节点的字体颜色为不可用色
Var_Bool = false;
}
else
{
newNode1.ForeColor = Color.Black;//改变树节点的字体颜色为可用色
Var_Bool = true;
}
newNode1.Tag = 0;//标识,有子项的命令项
//将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
ToolStripDropDownItem newmenu = (ToolStripDropDownItem)MenuS.Items[i];
GetCavernMenu(newNode1, newmenu, Var_Bool);//添加多层命令项
}
} /// <summary>
/// 将MenuStrip控件中的多层命今项添加到TreeView控件中
/// </summary>
/// <param newNodeA="TreeNode">TreeNode对象</param>
/// <param newmenuA="ToolStripDropDownItem">ToolStripDropDownItem对象</param>
/// <param BL="bool">标识(是否可用)</param>
public void GetCavernMenu(TreeNode newNodeA, ToolStripDropDownItem newmenuA, bool BL)
{
bool Var_Bool = true;
if (newmenuA.HasDropDownItems && newmenuA.DropDownItems.Count > 0)
for (int j = 0; j < newmenuA.DropDownItems.Count; j++) //遍历二级菜单项
{
//将二级菜单名称添加到TreeView组件的子节点newNode1中,并设置当前节点的子节点newNode2
TreeNode newNodeB = newNodeA.Nodes.Add(newmenuA.DropDownItems[j].Text);
Var_Bool = true;
if (BL == false)//判断当前命令项的上一级命令是否可用
{
newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
newNodeB.Tag = 0;//标识,不显示相应的窗体
Var_Bool = false;
}
else
{
if (newmenuA.DropDownItems[j].Enabled == false)//判断当前命令项是否为可用
{
newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
newNodeB.Tag = 0;//标识,不显示相应的窗体
Var_Bool = false;
}
else
{
newNodeA.ForeColor = Color.Black;//设置当前命令项的字体颜色为可用色
newNodeB.Tag = int.Parse(newmenuA.DropDownItems[j].Tag.ToString());//标识,显示相应的窗体
}
}
//将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
ToolStripDropDownItem newmenuB = (ToolStripDropDownItem)newmenuA.DropDownItems[j];
if (newmenuB.HasDropDownItems && newmenuA.DropDownItems.Count > 0)//如果当前命令项有子项
{
newNodeB.Tag = 0;//标识,有子项的命令项
GetCavernMenu(newNodeB, newmenuB, Var_Bool);//调用递归方法
}
}
}
按钮点击事件
private void toolStripButton1_Click(object sender, EventArgs e)
{
frm_show(//打开MenuStrip控件或TreeView控件相应的窗体
Convert.ToInt16(((ToolStripButton)sender).Tag.ToString()), ((ToolStripButton)sender).Text);
} private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
frm_show(//打开MenuStrip控件或TreeView控件相应的窗体
Convert.ToInt16(e.Node.Tag.ToString()), e.Node.Text);
} /// <summary>
/// 打开MenuStrip控件或TreeView控件相应的窗体
/// </summary>
/// <param n="int">标识</param>
/// <param FName="string">名称</param>
public void frm_show(int n, string FName)
{
switch (n)//通过标识调用各子窗体
{
case 0: break;
case 1:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 2:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 3:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 4:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 5:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 6:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 7:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 8:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 9:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 10:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 11:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 12:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 13:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 14:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 15:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 16:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 17:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 18:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 19:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 21:
{
//打开记事本
System.Diagnostics.Process.Start("notepad.exe");
break;
}
case 22:
{
//打开计算器
System.Diagnostics.Process.Start("calc.exe");
break;
}
case 23:
{
//打开WORD文档
System.Diagnostics.Process.Start("WINWORD.EXE");
break;
}
case 24:
{
//打开EXCEL文件
System.Diagnostics.Process.Start("EXCEL.EXE");
break;
}
case 25:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 26:
{
if (MessageBox.Show("确认退出系统吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
Application.Exit();//关闭当前工程
break;
}
case 27:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 28:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 29:
{
Form2 fp = new Form2();//实例化一个窗体
fp.Text = FName;//设置窗体的名称
fp.ShowDialog();//用模试对话框打开窗体
fp.Dispose();//释放窗体的所有资原
break;
}
case 30:
{
//打开帮助对话框
MessageBox.Show("\t你可以到明日科技网站\t\n\n\t 得到你想知道的\n\t 谢谢使用!!");
break;
}
}
}
C# 用树形列表 动态 显示菜单的更多相关文章
- Bootstrap 树形列表与右键菜单
Bootstrap 树形列表与右键菜单 介绍两个Bootstrap的扩展 Bootstrap Tree View 树形列表 jQuery contextMenu 右键菜单 Demo采用CDN分发,直接 ...
- Winform开发主界面菜单的动态树形列表展示
我在之前很多文章里面,介绍过Winform主界面的开发,基本上都是标准的界面,在顶部放置工具栏,中间区域则放置多文档的内容,但是在顶部菜单比较多的时候,就需要把菜单分为几级处理,如可以在顶部菜单放置一 ...
- 【插件篇】前段bootstrap-table-treegrid试手,解决无法显示树形列表或者图标不显示问题。
说明:具体代码操作我就不贴了.官方有正规的例子!bootstrap-table-examples传送 使用注意事项: 传入的id和pid可以是string类型的(我后台返回的是Long类型转换成str ...
- 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形网格动态加载
jQuery EasyUI 树形菜单 - 树形网格动态加载 动态加载树形网格有助于从服务器上加载部分的行数据,避免加载大型数据的长时间等待.本教程将向您展示如何创建带有动态加载特性的树形网格(Tree ...
- EBS 显示主页面的工作列表和主菜单
EBS环境: R12.1.3 问题描述:如果系统的“个性化页”做了设置,可能出现登录系统后,如果下图红框中的 主菜单和工作列表没有显示的情况,如果需要重新显示“主菜单”和“工作列表”,可参考以下操作 ...
- 使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
查看本章节 查看作业目录 需求说明: 使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态.点击列表的项,切 ...
- Ajax-ajax实例3-动态树形列表
项目结构: 项目演示: 技术要点: 1.3.2 技术要点在基本原理的介绍中,了解到通过在父节点内动态创建子节点,并利用样式表缩进完成树形列表的基本框架.除了这一点外,还有下面一些问题需要考虑.1 .将 ...
- 在Bootstrap开发框架中使用bootstrapTable表格插件和jstree树形列表插件时候,对树列表条件和查询条件的处理
在我Boostrap框架中,很多地方需要使用bootstrapTable表格插件和jstree树形列表插件来共同构建一个比较常见的查询界面,bootstrapTable表格插件主要用来实现数据的分页和 ...
- python 全栈开发,Day109(客户管理之动态"二级"菜单)
昨日内容回顾 1. 权限有几张表? 2. 简述权限流程? 3. 为什么要把权限放入session? 4. 静态文件和模块文件 5. 相关技术点 - orm查询 - 去空 - 去重 - 中间件 - in ...
- python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)
一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...
随机推荐
- Linux笔记01: Linux简介
1.1 操作系统 计算机系统是由硬件子系统(处理器.内存.硬盘.键盘.鼠标.显示屏等)和软件子系统(如Windows操作系统.Office办公软件等)组成. 操作系统(Operating System ...
- 是谁的简历上全是秒杀商城和RPC啊?
是不是还在苦于自己简历上的项目离不开商城.RPC.秒杀.论坛.外卖.点评等等烂大街的项目?是不是翻遍全网再很难找到一个既有含金量又能看得懂的项目?那么现在就不用找了,下面这个项目一定适合你! 高性能短 ...
- Python 潮流周刊第 31 期(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 记录一些JDK的新特性~持续更新
1.record快速定义类 @Test public void testRecord() { /** * JDK16新特性 * * @param start * @param end */ recor ...
- Windows系统激活工具HK
下载:https://wwsi.lanzoum.com/iyUNn10e7foh 密码:g05d GitHub开源 .无毒 原文链接:https://github.com/zbezj/HEU_KMS_ ...
- 通过数字证书对PDF电子文件进行数字签名/盖章
以下代码详细说明如何使用数字证书对PDF电子文件进行数字签名/盖章.PDF文件签署主要传递PDF文件,数字证书信息,签章图片3个信息.代码中需要的文件.数字证书.签章图片可访问开放签电子签章开源系统详 ...
- Guava常用工具类总结
=== -"我想写得更优雅,可是没人告诉我怎么写得更优雅" -"Null的含糊语义让人很不舒服.Null很少可以明确地表示某种语义,例如,Map.get(key)返回Nu ...
- EFCore CodeFirst DBFirst Demo
1.简单Demo单独记录一下使用过程,Nuget对应.Net环境版本数据库包.EF Core 的 PMC 工具包. 2.CodeFirst 包管理器控制台(PMC)输入命令,迁移创建数据库: Add- ...
- 智能对联模型太难完成?华为云ModelArts助你实现!手把手教学
摘要:农历新年将至,听说华为云 AI 又将开启智能对对联迎接牛气冲天,让我们拭目以待!作为资深 Copy 攻城狮,想要自己实现一个对对联的模型,是不能可能完成的任务,因此我搜罗了不少前人的实践案例,今 ...
- 解析数仓lazyagg查询重写优化
摘要:本文对Lazy Agg查询重写优化和GaussDB(DWS)提供的Lazy Agg重写规则进行介绍. 本文分享自华为云社区<GaussDB(DWS) lazyagg查询重写优化解析[这次高 ...