开发环境:VS2008.NET2.0,网上找到的一个文章:Vs2005的win form动态生成菜单

找了很久才找到这个两年前的文章,是通过定义Dataset实现,既然.NET有内置的XML对象,就另写了一个,

另一个原因是,文中给出的XML文件,每条MenuItem都是由平行的MenuItemID和ParentItemID组成的,因为菜单是层次结构,而XML正好符合这个特性,

本例只涉及两层菜单:

private void CreateInstructionsListMenu(ToolStripMenuItem toolStripMenuItem_Instruments)
        {
            XmlDocument objXmlDoc = new XmlDocument(); 
            objXmlDoc.Load(@"..\..\Data\XMLInstructions.xml"); 
            XmlNodeList nodeList = objXmlDoc.SelectSingleNode("InstructionList").ChildNodes;
            foreach (XmlNode InstructionType in nodeList)
            {
                ToolStripMenuItem TypeMenu = new ToolStripMenuItem();
                TypeMenu.Text = InstructionType.Attributes["CNName"].Value;
                foreach (XmlNode Instruction in InstructionType.ChildNodes)
                {
                    ToolStripMenuItem InstructionMenu = new ToolStripMenuItem();
                    InstructionMenu.Text = Instruction.Attributes["Name"].Value;
                    InstructionMenu.ShortcutKeyDisplayString = Instruction.Attributes["GMName"].Value;
                    InstructionMenu.Tag = Instruction.Attributes["GMId"].Value;
                    InstructionMenu.Click += new EventHandler(InstructionMenu_Click);
                    TypeMenu.DropDownItems.Add(InstructionMenu);
                }
                toolStripMenuItem_Instruments.DropDownItems.Add(TypeMenu);
            }

}

相应的XML文件

<?xml version= "1.0" encoding= "utf-8" ?>
<InstructionList>
  <Type CNName="钢琴" GMName="&amp;Piano" AltKey="P">
    <Instruction GMId="0" AltKey="A" GMName="&amp;Acoustic Grand Piano" Name="大钢琴(声学钢琴)" />
    <Instruction GMId="1" AltKey="B" GMName="&amp;Bright Acoustic Piano" Name="明亮的钢琴"/>
    <Instruction GMId="2" AltKey="E" GMName="&amp;Electric Grand Piano" Name="电钢琴"/>
    <Instruction GMId="3" AltKey="O" GMName="H&amp;onky-tonk Piano" Name="酒吧钢琴"/>
    <Instruction GMId="4" AltKey="R" GMName="&amp;Rhodes Piano" Name="柔和的电钢琴"/>
    <Instruction GMId="5" AltKey="C" GMName="&amp;Chorused Piano" Name="加合唱效果的电钢琴"/>
    <Instruction GMId="6" AltKey="H" GMName="&amp;Harpsichord" Name="羽管键琴(拨弦古钢琴)"/>
    <Instruction GMId="7" AltKey="L" GMName="C&amp;lavichord" Name="科拉维科特琴(击弦古钢琴)"/>
  </Type>
  <Type CNName="色彩打击乐器" GMName="&amp;Chromatic Percussion" AltKey="C">
    <Instruction GMId="8" AltKey="C" GMName="&amp;Celesta" Name="钢片琴"/>
    <Instruction GMId="9" AltKey="G" GMName="&amp;Glockenspiel" Name="钟琴"/>
    <Instruction GMId="10" AltKey="B" GMName="Music &amp;box" Name="八音盒"/>
    <Instruction GMId="11" AltKey="V" GMName="&amp;Vibraphone" Name="颤音琴"/>
    <Instruction GMId="12" AltKey="M" GMName="&amp;Marimba" Name="马林巴"/>
    <Instruction GMId="13" AltKey="X" GMName="&amp;Xylophone" Name="木琴"/>
    <Instruction GMId="14" AltKey="T" GMName="&amp;Tubular Bells" Name="管钟"/>
    <Instruction GMId="15" AltKey="D" GMName="&amp;Dulcimer" Name="大扬琴"/>
  </Type>
  <Type CNName="风琴" GMName="&amp;Organ" AltKey="O">
    <Instruction GMId="16" AltKey="O" GMName="Hammond &amp;Organ" Name="击杆风琴"/>
    <Instruction GMId="17" AltKey="P" GMName="&amp;Percussive Organ" Name="打击式风琴"/>
    <Instruction GMId="18" AltKey="R" GMName="&amp;Rock Organ" Name="摇滚风琴"/>
    <Instruction GMId="19" AltKey="C" GMName="&amp;Church Organ" Name="教堂风琴"/>
    <Instruction GMId="20" AltKey="E" GMName="R&amp;eed Organ" Name="簧管风琴"/>
    <Instruction GMId="21" AltKey="A" GMName="&amp;Accordian" Name="手风琴"/>
    <Instruction GMId="22" AltKey="H" GMName="&amp;Harmonica" Name="口琴"/>
    <Instruction GMId="23" AltKey="T" GMName="&amp;Tango Accordian" Name="探戈手风琴"/>
  </Type>

<InstructionList>

效果截图:

转载于:https://www.cnblogs.com/kevinkim/archive/2011/10/31/2230001.html

WinForm XML相关推荐

  1. 在ASP.Net中实现RSA加密

    在我们实际运用中,加密是保证数据安全的重要手段.以前使用ASP时,对数据加密可以使用MD5和SHA1算法,这两种算法虽然快捷有效,但是无法对通过它们加密的密文进行反运算,即是解密.因此需要解密数据的场 ...

  2. c#读取xml文件配置文件Winform及WebForm-Demo具体解释

    我这里用Winform和WebForm两种为例说明怎样操作xml文档来作为配置文件进行读取操作. 1.新建一个类,命名为"SystemConfig.cs".代码例如以下: < ...

  3. Winform中实现序列化指定类型的对象到指定的Xml文件和从指定的Xml文件中反序列化指定类型的对象

    场景 在Winform程序中需要将某些页面的设置存储到配置文件中,下次再次打开时通过配置文件读取,点击确定时能将将设置保存到配置文件中. 之前介绍过 Winform中自定义xml配置文件后对节点进行读 ...

  4. Winform中对xml文件进行保存时空白节点自动换行问题的解决

    场景 Winform中自定义xml配置文件后对节点进行读取与写入: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10053213 ...

  5. Winform中实现读取xml配置文件并动态配置DevExpress的RadioGroup的选项

    场景 Winform中对DevExpress的RadioGroup进行数据源绑定,即通过代码添加选项: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl ...

  6. Winform中对自定义xml配置文件进行Xml节点的添加与删除

    场景 Winform中自定义xml配置文件后对节点进行读取与写入: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10053213 ...

  7. Winform中自定义xml配置文件后对节点进行读取与写入

    场景 Winform中自定义xml配置文件,并配置获取文件路径: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100522648 ...

  8. Winform中自定义xml配置文件,并配置获取文件路径

    场景 在Winform程序中,需要将一些配置项存到配置文件中,这时就需要自定义xml的配置文件格式.并在一些工具类中去获取配置文件的路径并加载其内容. 关注公众号 霸道的程序猿 获取编程相关电子书.教 ...

  9. C# winform 不同的窗体对同一XML文件进行读取

    对数据进行写入 DataTable dingxing = new DataTable(); dingxing.Columns.Add("checker"); dingxing.Co ...

最新文章

  1. P1086 花生采摘
  2. VSS自动发布站点功能扩展
  3. asp.net下的串口编程
  4. 用反向传导模拟电子运动并模拟HF,HCl,HBr
  5. JDK 12 Early Access Build 12中的原始字符串文字支持
  6. MySQL5安装配置笔记【超详细】
  7. 浮点型数据类型存储空间大小(信息学奥赛一本通-T1017)
  8. C++面向对象编程之类的使用(基础案例学习)
  9. android studio自定义类,为AndroidStudio设置自定义类注释
  10. Tensorflow实例,拟合二维数据
  11. 渗透测试-地基篇-拖库七种方法(十一)
  12. 基于java客户关系管理系统
  13. 【学习中】layui前端框架
  14. java运行期类型鉴定
  15. 算法Big O Notation
  16. Unity3D中的对齐
  17. 01. Linux 简介
  18. 怎样把两个表格合并成一个
  19. Centos 7 matlab2018a安装及键盘无法输入的问题
  20. 【MyBatis动态SQL批量修改数据出现报错问题】

热门文章

  1. [转载] Python 完整实现的简单遗传算法(SGA)
  2. ESP分区重建,解决各种引导问题
  3. 作业1-3 求1+2!+3!+...+20!的和
  4. JavaScript事件冒泡和事件委托
  5. 同一个项目,项目名称不一致,这两个项目同时在Eclipse中出现
  6. C# using的使用
  7. 收集的图像处理网站http://blog.csdn.net/chief1985/article/details/1898358
  8. java开发搭建环境搭建_Java开发环境搭建
  9. vue多页面开发_使用VUE进行移动端H5页面开发前准备
  10. nbu备份oracle rac,利用NETBACKUP将备份写到磁盘上