,,C#实现基于XML配置MenuStrip菜单的方法

,,C#实现基于XML配置MenuStrip菜单的方法

本文主要介绍基于XML的C#配置MenuStrip菜单的方法,涉及C#使用XML配置MenuStrip菜单的原理和实现技巧,有一定的参考价值,有需要的朋友可以参考一下。

本文介绍了基于XML的C#配置MenuStrip菜单的方法。分享给你,供你参考。如下所示:

1.本程序的描述

用XML来配置MenuStrip菜单,本程序只提供一个思路。在Load函数中,程序根据XML文件中的设置动态生成MenuStrip组件的Items集合。

程序示例如下:

2.使用的XML文档示例

?xml版本='1.0 '编码='gb2312 '?

!-menustrip:MNS主菜单控制中的每个菜单配置-

!- Menu:菜单栏中的项目,Text:显示名称,ShortKey:快捷键-

MenuStrip

菜单文本='文件'快捷键=' alt f '

Item Type='MenuItem' Text='修改窗口颜色'

item Type=' MenuItem ' Text==' red ' short key=' Shift F6 '

function attribute=' color tored '/

item Type=' MenuItem ' Text=' green ' short key=' Shift F7 '

function attribute=' ColorToLawnGreen '/

/项目

项目类型='分隔符'/

item Type=' MenuItem ' Text=' normal '快捷键='Ctrl Shift X '

function attribute=' form normal '/

item Type=' MenuItem ' Text==' minimize '快捷键='Ctrl Shift Y '

function attribute=' form minimize '/

item Type=' MenuItem ' Text==' maximize '快捷键='Ctrl Shift Z '

function attribute=' form maximize '/

项目类型='分隔符'/

item Type=' MenuItem ' Text==' close '快捷键='Alt F4 '

FunctionAttribute='FormClose' /

/菜单

Text=' help '快捷键=' alt f '

item Type=' MenuItem ' Text==' about ' function attribute=' form about '/

/菜单

/MenuStrip

配置规则:

所有内容都在标签MenuStrip中。

每个菜单标签代表一个水平菜单项,其中Text属性是显示的文本,ShortKey属性是选择的快捷键。

每个项目标签都在菜单或项目标签下,表示一个菜单项,菜单项中可以嵌套其他项目菜单项。

的类型属性。item标记表示此图像的类型,可分为两类:Seperator和MenuItem,前者对应ToolStripItem类,后者对应ToolStripSeparator类。

在。item选项卡,如果Type属性为MenuItem,还可以设置Text属性(显示文本)、ShortKey属性(快捷键)和FunctionAttribute属性(点击实例生成后要调用的函数绑定属性值)。

此外,单击该程序中生成的菜单会调用一个函数,该函数上方有一个RemarkAttribute。如果FunctionAttribute的值与其一致,将调用该函数。这个功能的设计没有死。它是这个程序中的一个函数。修改后还可以对应自定义控件、类等。

3.关于程序表单

该表单没有设置其他属性,只有一个名为mnsMainMenu的空MenuStrip。表单的名称是FormMain。

4.程序代码

使用系统;

使用系统。集合。泛型;

使用系统。组件模型;

使用系统。数据;

使用系统。绘图;

使用系统。Linq

使用系统。文本;

使用系统。线程。任务;

使用系统。Windows . Forms

使用系统。Xml

使用系统。反思;

命名空间程序22

{

公共分部类FormMain : Form

{

公共表单Main()

{

initialize component();

}

//1.将MenuConfig.xml中的信息反映到菜单mnsMainMenu中。

//2.直接添加显示文本、快捷键等信息,在标签中添加FunctionName属性。

//3.通过反射找到对应的函数,完成运算。

私有void Form1_Load(对象发送方,EventArgs e)

{

SetMainMenu(' menu config . XML ');

}

///摘要

///设置MenuStrip控件

////摘要

///param name='address'/param

私有void SetMainMenu(字符串地址)

{

//设置前清除MenuStrip中的所有项目

mnsMainMenu。items . Clear();

//读取XML文件

XML document XML doc=new XML document();

xmlDoc。负载(地址);

XmlNode root=xmlDoc。SelectSingleNode(' MenuStrip ');

SetMenu(mnsMainMenu,root);

}

///摘要

///设置MenuStrip控件第一层菜单及其子菜单

////摘要

///param name='ms'MenuStrip控件/param

///param name='xnode'XML结点/param

私有void SetMenu(MenuStrip ms,XmlNode xnode)

{

foreach(xnode中的XmlNode xn .子节点)

{

XML元素xe=(XML元素)xn;

toolstrip menuitem new tsmi=new toolstrip menuitem(xe .get属性(“Text”);

//设置快捷键

如果(字符串IsNullOrWhiteSpace(xe .GetAttribute('ShortKey '))

{

SetShortKey(newtsmi,xe .get属性(“快捷键”);

}

//设置调用函数

如果(!字符串IsNullOrWhiteSpace(xe .get属性('函数属性'))

{

纽茨米Tag=xe .get属性(“函数属性”);

纽茨米Click=ToolStripMenuItem _ Click

}

//设置子菜单

如果(xn .子节点数。=0)

{

SetItem(newtsmi,xn);

}

女士物品。添加(新tsmi);

}

}

///摘要

///设置工具条菜单项控件及其子菜单(递归设置)

////摘要

///param name=' tsmi ' toolstrip menuitem控件/param

///param name='xnode'XML结点/param

私有void SetItem(toolstrip menuitem tsmi,XmlNode xnode)

{

foreach(xnode中的XmlNode xn .子节点)

{

XML元素xe=(XML元素)xn;

toolstrip menuitem new tsmi=new toolstrip menuitem(xe .get属性(“Text”);

开关(xe .get属性(" Type "))

{

案例“菜单项”:

{

//设置快捷键

如果(!字符串IsNullOrWhiteSpace(xe .GetAttribute('ShortKey '))

{

SetShortKey(newtsmi,xe .get属性(“快捷键”);

}

//设置调用函数

如果(!字符串IsNullOrWhiteSpace(

xe .get属性('函数属性'))

{

纽茨米Tag=xe .get属性(“函数属性”);

纽茨米Click=ToolStripMenuItem _ Click

}

//设置子菜单

如果(xn .子节点数。=0)

{

SetItem(newtsmi,xn);

}

tsmi .下拉项目。Add(newtsmi作为toolstrip项);

}破;

案例"分隔符":

{

tsmi .下拉项目。添加(新的toolstrip分隔符());

}破;

默认:断开

}

}

}

///摘要

///通过字符串(如Ctrl Alt A ')判断按键信息

////摘要

///param name='key'/param

///返回/返回

私有void set快捷键(toolstrip menuitem tsmi,字符串键)

{

系统窗户。表格.钥匙结果=默认值(系统窗户。表格。钥匙);

string[] keys=key .拆分("");

如果(键。包含(' Ctrl '){ result |=Keys .控制;}

如果(键。包含(' Shift '){ result |=Keys .移位;}

如果(键。包含(“Alt”){ result |=Keys .Alt}

如果(键。包含(' A '){ result |=Keys .a;}

如果(键。包含(' B '){ result |=Keys .b;}

如果(键。包含(' C '){ result |=Keys .c;}

如果(键。包含(' D '){ result |=Keys .d;}

如果(键。包含(' E '){ result |=Keys .e;}

如果(键。包含(' F '){ result |=Keys .f;}

如果(键。包含(' G '){ result |=Keys .g;}

如果(键。包含(' H '){ result |=Keys .h;}

如果(键。包含(' I '){ result |=Keys .我;}

如果(键。包含(' J '){ result |=Keys .j;}

如果(键。包含(' K '){ result |=Keys .k;}

如果(键。包含(' L '){ result |=Keys .l;}

如果(键。包含(' M '){ result |=Keys .m;}

如果(键。包含(' N '){ result |=Keys .n;}

如果(键。包含(' O '){ result |=Keys .o;}

如果(键。包含(' P '){ result |=Keys .p;}

如果(键。包含(' Q '){ result |=Keys .q;}

如果(键。包含(' R '){ result |=Keys .r;}

如果(键。包含(' S '){ result |=Keys .s;}

如果(键。包含(' T '){ result |=Keys .t;}

如果(键。包含(' U '){ result |=Keys .u;}

如果(键。包含(' V '){ result |=Keys .五;}

如果(键。包含(' W '){ result |=Keys .w;}

如果(键。包含(' X '){ result |=Keys .x;}

如果(键。包含(' Y '){ result |=Keys .y;}

如果(键。包含(' Z '){ result |=Keys .z;}

如果(键。包含(' 0 '){ result |=Keys .d0;}

如果(键。包含(' 1 '){ result |=Keys .D1;}

如果(键。包含(' 2 '){ result |=Keys .D2;}

如果(键。包含(' 3 '){ result |=Keys .D3;}

如果(键。包含(' 4 '){ result |=Keys .D4;}

如果(键。包含(' 5 '){ result |=Keys .D5;}

如果(键。包含(' 6 '){ result |=Keys .D6;}

如果(键。包含(' 7 '){ result |=Keys .D7;}

如果(键。包含(' 8 '){ result |=Keys .D8;}

如果(键。包含(' 9 '){ result |=Keys .d9;}

如果(键。包含(' F1 '){ result |=Keys .f1;}

如果(键。包含(' F2 '){ result |=Keys .F2;}

如果(键。包含(' F3 '){ result |=Keys .F3;}

如果(键。包含(' F4 '){ result |=Keys .F4;}

如果(键。包含(' F5 '){ result |=Keys .F5;}

如果(键。包含(' F6 '){ result |=Keys .F6;}

如果(键。包含(' F7 '){ result |=Keys .F7;}

如果(键。包含(' F8 '){ result |=Keys .F8;}

如果(键。包含(' F9 '){ result |=Keys .F9;}

如果(键。包含(' F10 '){ result |=Keys .F10;}

如果(键。包含(' F11 '){ result |=Keys .F11}

如果(键。包含(' F12 '){ result |=Keys .F12}

tsmi .快捷键=结果;

}

///摘要

///特性备注属性,用在函数上,其注意属性决定了

///积分函数综合应该选择程序中的哪个函数进行计算

////摘要

[属性用法(属性目标。方法)]

公共类注释属性:属性

{

字符串备注;

公共字符串注释

{

获取{返回备注}

}

//构造函数

公共注释属性(字符串注释)

{

备注=评论;

}

}

///摘要

///单击一个工具条菜单项后触发的事件

////摘要

///param name='sender'/param

///param name='e'/param

私有void ToolStripMenuItem_Click(对象发送方,EventArgs e)

{

//如果标签为空,则不执行任何事件

如果(字符串IsNullOrWhiteSpace((string)((toolstrip menuitem)sender).标签))

{

返回;

}

//如果标签存在,则寻找具有和标签内容一致特性的函数并调用

函数调用((string)((toolstrip menuitem)发送方).标签);

}

///摘要

///调用具有指定特性名的函数

////摘要

///param name='funcattr '函数的评论属性特性值/param

私有void函数调用(字符串函数属性)

{

//需要使用系统。反思;

MethodInfo[] mi=typeof(FormMain).GetMethods(

绑定标志.公共|绑定标志.非公共|绑定标志.实例);

//找到具有指定特性的函数,进行调用

foreach (MethodInfo m in mi)

{

类型T2=的类型(remak属性);

remak属性ra=(remak属性)属性GetCustomAttribute(m,T2);

如果(ra!=空ra .备注==funcattr)

{

米(米的缩写))Invoke(this,new object[]{ });

打破;

}

}

}

//需要调用的函数

[remak属性(' color tored ')]//窗口底色:红

private void ChangeColorToRed(){ this .背景色=颜色。红色;}

[remak属性(' ColorToLawnGreen ')]//窗口底色:绿

private void ChangeColorToLawnGreen(){ this .背景色=颜色。劳恩格林;}

[remak属性(' form normal ')]//窗口大小:普通

private void ChangeSizeToNrm(){ this .WindowState=FormWindowState .正常;}

[remark属性(' form minimize ')]//窗口大小:最小化

private void ChangeSizeToMin(){ this .WindowState=FormWindowState .最小化;}

[remak属性(' form maximize ')]//窗口大小:最大化

private void ChangeSizeToMax(){ this .WindowState=FormWindowState .最大化;}

[remak属性(' form close ')]//退出程序

私有void关闭表单(){ Application .exit();}

[备注属性(' form about ')]//关于程序

form()的私有void { MessageBox .显示('由Tsybius 2014年5月15日撰写');}

}

}

希望本文所述对大家的C#程序设计有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • 留言与评论(共有 条评论)
       
    验证码: