如图

页面加载

        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# 用树形列表 动态 显示菜单的更多相关文章

  1. Bootstrap 树形列表与右键菜单

    Bootstrap 树形列表与右键菜单 介绍两个Bootstrap的扩展 Bootstrap Tree View 树形列表 jQuery contextMenu 右键菜单 Demo采用CDN分发,直接 ...

  2. Winform开发主界面菜单的动态树形列表展示

    我在之前很多文章里面,介绍过Winform主界面的开发,基本上都是标准的界面,在顶部放置工具栏,中间区域则放置多文档的内容,但是在顶部菜单比较多的时候,就需要把菜单分为几级处理,如可以在顶部菜单放置一 ...

  3. 【插件篇】前段bootstrap-table-treegrid试手,解决无法显示树形列表或者图标不显示问题。

    说明:具体代码操作我就不贴了.官方有正规的例子!bootstrap-table-examples传送 使用注意事项: 传入的id和pid可以是string类型的(我后台返回的是Long类型转换成str ...

  4. 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形网格动态加载

    jQuery EasyUI 树形菜单 - 树形网格动态加载 动态加载树形网格有助于从服务器上加载部分的行数据,避免加载大型数据的长时间等待.本教程将向您展示如何创建带有动态加载特性的树形网格(Tree ...

  5. EBS 显示主页面的工作列表和主菜单

    EBS环境: R12.1.3 问题描述:如果系统的“个性化页”做了设置,可能出现登录系统后,如果下图红框中的 主菜单和工作列表没有显示的情况,如果需要重新显示“主菜单”和“工作列表”,可参考以下操作 ...

  6. 使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态

    查看本章节 查看作业目录 需求说明: 使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态.点击列表的项,切 ...

  7. Ajax-ajax实例3-动态树形列表

    项目结构: 项目演示: 技术要点: 1.3.2 技术要点在基本原理的介绍中,了解到通过在父节点内动态创建子节点,并利用样式表缩进完成树形列表的基本框架.除了这一点外,还有下面一些问题需要考虑.1 .将 ...

  8. 在Bootstrap开发框架中使用bootstrapTable表格插件和jstree树形列表插件时候,对树列表条件和查询条件的处理

    在我Boostrap框架中,很多地方需要使用bootstrapTable表格插件和jstree树形列表插件来共同构建一个比较常见的查询界面,bootstrapTable表格插件主要用来实现数据的分页和 ...

  9. python 全栈开发,Day109(客户管理之动态"二级"菜单)

    昨日内容回顾 1. 权限有几张表? 2. 简述权限流程? 3. 为什么要把权限放入session? 4. 静态文件和模块文件 5. 相关技术点 - orm查询 - 去空 - 去重 - 中间件 - in ...

  10. python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)

    一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...

随机推荐

  1. MySQL 分组排序后 → 如何取前N条或倒数N条

    开心一刻 晚上,老婆辅导女儿写语文作业 填空题:春天来了,__绿了 女儿:春天来了,爸爸绿了 老婆一脸不悦地问道:你再说一遍,春天来了,什么玩意绿了? 女儿:春天来了,爸爸绿了呀 老婆很生气,但依旧温 ...

  2. eclipse的问题

    在我使用eclipse的时候出现的一个问题 就是因为汉化之后出现的问题 问题的解决办法 点击帮助 关于 安装细节 选中Babel Language Pack for rt.rap in Chinese ...

  3. vue-test -----ListDemo 列表渲染

    <template> <h3>数组</h3> <button @click="addnums">添加数据</button> ...

  4. 探索 ECMAScript 2023 中的新数组方法

    前言 ECMAScript 2023 引入了一些新功能,以改进语言并使其更加强大和无缝.这个新版本带来了令人兴奋的功能和新的 JavaScript 数组方法,使使用 JavaScript 编程更加愉快 ...

  5. bash shell笔记整理——ls命令

    语法: ls [选项] [文件 或 目录] 选项 使用说明 –a 显示指定目录下的所有文件,包括隐藏文件. -A 显示除了.和..的外的所有文件. -l 显示详细的文件信息. -d 如果是目录,只显示 ...

  6. 太牛叉了!国产 AI 智能体惊艳问世,全面致敬 FastGPT!

    太震撼了!太厉害了!昆仑万维正式发布了「天工 SkyAgents」平台,助力大模型走入千家万户.你听听,这个名字一听就有一种巧夺天工的感觉,技艺那是相当的高超. 这个平台基于昆仑万维「天工大模型」打造 ...

  7. GIS系统想要实现Cesium For Unreal的视觉效果是否有捷径可走?

    对于大多数GIS开发人员来说,CesiumJS都是比较熟悉的引擎,但是相比较Cesium For Unreal而言,CesiumJS的视觉效果就显得差强人意了,因此一些GIS开发人员对Cesium F ...

  8. Java反射,看完就会用

    什么是反射 在说反射概念之前,我们先说另外2个概念:编译期和运行期. 编译期: 编译期是源代码从文本形式转换为字节码的过程,这发生在Java代码被JVM执行之前. 在编译期,编译器对源代码进行语法检查 ...

  9. 大四jsp实训项目技术总结

    crm项目总结 ①静态资源疯狂报错?很有可能是后端的问题,后端出了问题,服务器取不出来资源. 记住:只要服务器取不到某个资源,很有可能导致所有资源都取不出来. 一个经典案例:某个数据库映射文件 ICu ...

  10. cp {,bak}用法(转载)

    cp filename{,bak} cp filename{,.bak} 这个命令是用来把filename备份成filename.bak的 等同于命令 cp filename filename.bak ...