c# winform读取xml创建菜单
动态创建菜单使得程序灵活性大大增加,本文根据读取xml文件中的配置菜单项来动态创建菜单,代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WinformMenu.Helper;
using System.Xml;
namespace WinformMenu
{
public partial class FrmAddMenu : Form
{
public FrmAddMenu()
{
InitializeComponent();
}
private void FrmAddMenu_Load(object sender, EventArgs e)
{
MenuStrip menuS = new MenuStrip();
menuS.Parent = this;
string xmlFileName = @"F:\c#工程\WinformMenu\WinformMenu\XML\菜单.xml";
createMenu(xmlFileName, menuS);
}
public void createMenu(string xmlFileName, MenuStrip menuS)
{
//1:根据XmlElement创建菜单
//XmlNode node = xmlHelper.GetXmlNode(xmlFileName, "//MangeTvMenu");
//foreach (XmlNode xml in node.ChildNodes)
//{
// ToolStripMenuItem mainMenu=new ToolStripMenuItem();
// mainMenu.Text = xml.Attributes["descript"].Value;
// menuS.Items.Add(mainMenu);
// if (xml.HasChildNodes)
// {
// CreateSubMenuByNode(xml, mainMenu);
// }
//}
//2:根据XmlNode创建菜单
XmlElement xml = xmlHelper.GetXmlElement(xmlFileName);
foreach (XmlElement xel in xml.ChildNodes)
{
ToolStripMenuItem mainMenu = new ToolStripMenuItem();
mainMenu.Text = xel.Attributes["descript"].Value;
menuS.Items.Add(mainMenu);
if (xml.HasChildNodes)
{
CreateSubMenuByElement(xel, mainMenu);
}
}
}
/// <summary>
/// 根据node节点递归创建菜单
/// </summary>
/// <param name="xNode"></param>
/// <param name="menuItem"></param>
public void CreateSubMenuByNode(XmlNode xNode, ToolStripMenuItem menuItem)
{
foreach (XmlNode xml in xNode.ChildNodes)
{
ToolStripMenuItem subMenu = new ToolStripMenuItem();
if (xml.ChildNodes.Count > 1)
{
subMenu.Text = xml.Attributes["descript"].Value;
menuItem.DropDown.Items.Add(subMenu);
CreateSubMenuByNode(xml, subMenu);
}
else
{
subMenu.Text = xml.InnerText;
menuItem.DropDown.Items.Add(subMenu);
}
}
}
/// <summary>
/// 根据元素节点递归创建菜单
/// </summary>
/// <param name="xml"></param>
/// <param name="menuItem"></param>
public void CreateSubMenuByElement(XmlElement xml, ToolStripMenuItem menuItem)
{
foreach (XmlElement xel in xml.ChildNodes)
{
ToolStripMenuItem subMenu = new ToolStripMenuItem();
if (xel.ChildNodes.Count>1)
{
subMenu.Text = xel.Attributes["descript"].Value;
menuItem.DropDown.Items.Add(subMenu);
CreateSubMenuByElement(xel, subMenu);
}
else
{
subMenu.Text = xel.InnerText;
menuItem.DropDown.Items.Add(subMenu);
}
}
}
///////////////////////////////////////////////////
}
}
xml文件格式如下:
<?xml version="1.0" encoding="utf-8" ?>
<MangeTvMenu descript="管理">
<Add descript="添加">
<Employee>员工</Employee>
<Deptment>部门</Deptment>
</Add>
<EmployeeInfo descript="员工信息">
<BaseInfo>个人基本信息</BaseInfo>
<StudyInfo>学历信息</StudyInfo>
<MarryInfo>婚姻信息</MarryInfo>
</EmployeeInfo>
<DeptmentInfo descript="部门信息">
<dept1>部门1</dept1>
<dept2>部门2</dept2>
</DeptmentInfo>
<MoneyManage descript="工资管理">
<BaseMoney>基本工资</BaseMoney>
<OtherMoney>绩效工资</OtherMoney>
</MoneyManage>
<Apply descript="申请">
<AddWork>加班</AddWork>
<ApplyWeek>请假</ApplyWeek>
<AddMoney>加薪</AddMoney>
<Another>其他</Another>
</Apply>
</MangeTvMenu>
效果如下图所示:
xmlHelper为自己写的一个操作xml的类,由于比较简单在此就不贴代码了。
发现如果将xel.ChildNodes.Count>1(也就是上面红色字体代码)换成xel.HasChildNodes程序就会报错,目前正在思考此问题,欢迎广大朋友指点。
c# winform读取xml创建菜单的更多相关文章
- 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值
前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...
- c#读取xml文件配置文件Winform及WebForm-Demo具体解释
我这里用Winform和WebForm两种为例说明怎样操作xml文档来作为配置文件进行读取操作. 1.新建一个类,命名为"SystemConfig.cs".代码例如以下: < ...
- 在C#中创建和读取XML文件
1.创建简单的XML文件 为了便于测试,我们首先创建控制台应用程序,项目命名为CreateXml,Program.cs代码如下: 这样会在C盘根目录下创建data2.xml文件,文件内容为 using ...
- Java读取、创建xml(通过dom方式)
创建一个接口 XmlInterface.java public interface XmlInterface { /** * 建立XML文档 * @ ...
- TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏
TinyXML2是simple.small.efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http: ...
- 【java开发系列】— JDOM创建、改动、删除、读取XML文件
有非常多中操作XML文件的方法,这里介绍一下JDOM的用法和技巧. JDOM下载地址 创建XML文档 XML文件是一种典型的树形文件,每一个文档元素都是一个document元素的子节点. 而每一个子元 ...
- 使用LINQ TO XML 创建xml文档,以及读取xml文档把内容显示到GridView例子
首先,准备了一个Model类 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
- 【java开发系列】—— JDOM创建、修改、删除、读取XML文件
有很多中操作XML文件的方法,这里介绍一下JDOM的使用方法和技巧. JDOM下载地址 创建XML文档 XML文件是一种典型的树形文件,每个文档元素都是一个document元素的子节点.而每个子元素都 ...
- C# 递归读取XML菜单数据
在博客园注册了有4年了,很遗憾至今仍未发表过博客,趁周末有空发表第一篇博客.小生不才,在此献丑了! 最近在研究一些关于C#的一些技术,纵观之前的开发项目的经验,做系统时显示系统菜单的功能总是喜欢把数据 ...
随机推荐
- EC读书笔记系列之5:条款9、条款10
条款9 绝不在构造和析构过程中调用virtual函数 记住: ★在构造和析构期间不要调用virtual函数,∵这类调用从不下降至derived class ---------------------- ...
- BZOJ 1396: 识别子串( 后缀数组 + 线段树 )
这道题各位大神好像都是用后缀自动机做的?.....蒟蒻就秀秀智商写一写后缀数组解法..... 求出Height数组后, 我们枚举每一位当做子串的开头. 如上图(x, y是height值), Heigh ...
- shared_ptr智能指针源码剖析
(shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化.根据文档 (http://www.boost.org/doc/ ...
- Jdbc初体验
Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成.JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序.然而各个开 ...
- jquery插件anccordion
(function(){ $.fn.YAccordion=function(options){ var settings={ trigger:'click', speed:300, }; if(opt ...
- HTML5 canvas准备知识
利用canvas来进行画图工作.因此,我们有必要进行一些画图方面的术语说明. 一.画布 在日常生活中,如果我们要画画,可以找纸.板.画布等等工具.而在网页元素中,我们只需要定义一个标签即可. < ...
- vijos 1047 送给圣诞夜的礼品 矩阵
题目链接 描述 当小精灵们把贺卡都书写好了之后.礼品准备部的小精灵们已经把所有的礼品都制作好了.可是由于精神消耗的缘故,他们所做的礼品的质量越来越小,也就是说越来越不让圣诞老人很满意.可是这又是没有办 ...
- [原创]反汇编之一:和Taskmgr过不去篇(无厘头版)
原文链接:和Taskmgr过不去篇(无厘头版) Hook入门级文章,主要想培养一下偶写文章的感觉,老鸟无视…我想看看技术文章能不能无厘头的写,如果效果不错的话,准备更上一层-----用我的原创漫画表达 ...
- PhotoShop-CS4使用-----如何对psd进行简单切图
一.如何快速截图 1.如果图片为psd样式 2.要用放大器放大该图,选择放大器,放大后如图 3.开始切图 以其中一个为例,选中你所要选择切的图片 4. 选中后 5.选择文件---新建 6.此 ...
- 供应类型与计划分类一致性检查(INV)
应用 Oracle Inventory 层 Level Function 函数名 Funcgtion Name CUXINVIMM 表单名 Form Name CUXINVIMM 说明 Descrip ...