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#的一些技术,纵观之前的开发项目的经验,做系统时显示系统菜单的功能总是喜欢把数据 ...
随机推荐
- [树结构]平衡二叉树AVL
平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度至多等于1,平衡二叉树又称为AVL树. 将二叉树节点的左子树深度减去右子树深度的值称为平衡因子BF,平衡二叉树上所有节点的平衡因子只可能 ...
- Using Apache with SSL1(转载)
SSL/TLS/WTLS原理 作者:yawl < yawl@nsfocus.com >主页:http://www.nsfocus.com日期:2001-02-19 一 前言 首先要澄清一下 ...
- leetcode Remove Duplicates from Sorted Array python
class Solution(object): def removeDuplicates(self,nums): if len(nums) <= 0: return 0 j=0 for i in ...
- Properties读写资源文件
Java中读写资源文件最重要的类是Properties,功能大致如下: 1. 读写Properties文件 2. 读写XML文件 3. 不仅可以读写上述两类文件,还可以读写其它格式文件如txt等,只要 ...
- Apache新版配置虚拟主机的注意事项
1.关于没有默认索引文件(index.php或者index.html)时,列出目录:需要开启模块 LoadModule autoindex_module modules/mod_autoindex.s ...
- Android IT资讯网络阅读器应用源码
这个是Android IT资讯网络阅读器应用,也是一款通过jsoup解析Html获取内容的网络阅读器,和前面的其实是类似的,也是大学时期闲暇完成,对照CSDN的Web页面元素设计进行解析提取内容,核心 ...
- English words
英语指路常用单词 the one-way street单行道traffic light红绿灯 fork road三叉路口intersection/crossroad 十字路口T road 丁字路口in ...
- vb mid 函数使用说明
Mid就是从一个字符串中取子字符串,比如a="aabbcc",我们想取出"bb"就可以用Mid("aabbcc",3,2)Mid有3个参数, ...
- android 添加左右滑屏手势
今天要在自己的项目中添加左右滑动,实现日期的加减(原来已经做了加减按键).滑动在一个中间的layout中进行 思路:添加左右划屏幕判断,得到判断后模拟加减按键按下. 模拟按键按下用 mbotton.p ...
- CF卡是什么
CF卡(Compact Flash)最初是一种用于便携式电子设备的数据存储设备.作为一种存储设备,它革命性的使用了闪存,于1994年首次由SanDisk公司生产并制定了相关规范.当前,它的物理格式已经 ...