<?xml version="1.0" encoding="gb2312"?> <!--MenuStrip:mnsMainMenu控件中的各个菜单配置--> <!--Menu:菜单栏中的各项,Text:显示名称,ShortKey:快捷键--> <MenuStrip> <Menu Text="文件(File)" ShortKey="Alt+F"> <Item Type="MenuItem" Text="修改窗口颜色"> <Item Type="MenuItem" Text="红色" ShortKey="Shift+F6" FunctionAttribute="ColorToRed" /> <Item Type="MenuItem" Text="绿色" ShortKey="Shift+F7" FunctionAttribute="ColorToLawnGreen" /> </Item> <Item Type="Seperator" /> <Item Type="MenuItem" Text="普通" ShortKey="Ctrl+Shift+X" FunctionAttribute="FormNormal" /> <Item Type="MenuItem" Text="最小化" ShortKey="Ctrl+Shift+Y" FunctionAttribute="FormMinimize" /> <Item Type="MenuItem" Text="最大化" ShortKey="Ctrl+Shift+Z" FunctionAttribute="FormMaximize" /> <Item Type="Seperator" /> <Item Type="MenuItem" Text="关闭" ShortKey="Alt+F4" FunctionAttribute="FormClose" /> </Menu> <Menu Text="帮助(Help)" ShortKey="Alt+F"> <Item Type="MenuItem" Text="关于" FunctionAttribute="FormAbout" /> </Menu> </MenuStrip>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using System.Reflection;
namespace Program22
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
//1.把MenuConfig.xml中的信息反映到菜单mnsMainMenu上
//2.显示文本、快捷键等信息直接添加,FunctionName属性添加到Tag中
//3.通过反射找到对应函数,完成操作
private void Form1_Load(object sender, EventArgs e)
{
SetMainMenu("MenuConfig.xml");
}
/// <summary>
/// 设置MenuStrip控件
/// </summary>
/// <param name="address"></param>
private void SetMainMenu(string address)
{
//设置前清空MenuStrip中所有项
mnsMainMenu.Items.Clear();
//读取XML文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(address);
XmlNode root = xmlDoc.SelectSingleNode("MenuStrip");
SetMenu(mnsMainMenu, root);
}
/// <summary>
/// 设置MenuStrip控件第一层菜单及其子菜单
/// </summary>
/// <param name="ms">MenuStrip控件</param>
/// <param name="xnode">XML结点</param>
private void SetMenu(MenuStrip ms, XmlNode xnode)
{
foreach (XmlNode xn in xnode.ChildNodes)
{
XmlElement xe = (XmlElement)xn;
ToolStripMenuItem newtsmi = new ToolStripMenuItem(xe.GetAttribute("Text"));
//设置快捷键
if (string.IsNullOrWhiteSpace(xe.GetAttribute("ShortKey")))
{
SetShortKey(newtsmi, xe.GetAttribute("ShortKey"));
}
//设置调用函数
if (!string.IsNullOrWhiteSpace(xe.GetAttribute("FunctionAttribute")))
{
newtsmi.Tag = xe.GetAttribute("FunctionAttribute");
newtsmi.Click += ToolStripMenuItem_Click;
}
//设置子菜单
if (xn.ChildNodes.Count != 0)
{
SetItem(newtsmi, xn);
}
ms.Items.Add(newtsmi);
}
}
/// <summary>
/// 设置 ToolStripMenuItem 控件及其子菜单(递归设置)
/// </summary>
/// <param name="tsmi">ToolStripMenuItem控件</param>
/// <param name="xnode">XML结点</param>
private void SetItem(ToolStripMenuItem tsmi, XmlNode xnode)
{
foreach (XmlNode xn in xnode.ChildNodes)
{
XmlElement xe = (XmlElement)xn;
ToolStripMenuItem newtsmi = new ToolStripMenuItem(xe.GetAttribute("Text"));
switch (xe.GetAttribute("Type"))
{
case "MenuItem":
{
//设置快捷键
if (!string.IsNullOrWhiteSpace(xe.GetAttribute("ShortKey")))
{
SetShortKey(newtsmi, xe.GetAttribute("ShortKey"));
}
//设置调用函数
if (!string.IsNullOrWhiteSpace(
xe.GetAttribute("FunctionAttribute")))
{
newtsmi.Tag = xe.GetAttribute("FunctionAttribute");
newtsmi.Click += ToolStripMenuItem_Click;
}
//设置子菜单
if (xn.ChildNodes.Count != 0)
{
SetItem(newtsmi, xn);
}
tsmi.DropDownItems.Add(newtsmi as ToolStripItem);
} break;
case "Seperator":
{
tsmi.DropDownItems.Add(new ToolStripSeparator());
} break;
default: break;
}
}
}
/// <summary>
/// 通过字符串(如"Ctrl+Alt+A")判断按键信息
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
private void SetShortKey(ToolStripMenuItem tsmi, string key)
{
System.Windows.Forms.Keys result = default(System.Windows.Forms.Keys);
string[] keys = key.Split('+');
if (keys.Contains("Ctrl")) { result |= Keys.Control; }
if (keys.Contains("Shift")) { result |= Keys.Shift; }
if (keys.Contains("Alt")) { result |= Keys.Alt; }
if (keys.Contains("A")) { result |= Keys.A; }
if (keys.Contains("B")) { result |= Keys.B; }
if (keys.Contains("C")) { result |= Keys.C; }
if (keys.Contains("D")) { result |= Keys.D; }
if (keys.Contains("E")) { result |= Keys.E; }
if (keys.Contains("F")) { result |= Keys.F; }
if (keys.Contains("G")) { result |= Keys.G; }
if (keys.Contains("H")) { result |= Keys.H; }
if (keys.Contains("I")) { result |= Keys.I; }
if (keys.Contains("J")) { result |= Keys.J; }
if (keys.Contains("K")) { result |= Keys.K; }
if (keys.Contains("L")) { result |= Keys.L; }
if (keys.Contains("M")) { result |= Keys.M; }
if (keys.Contains("N")) { result |= Keys.N; }
if (keys.Contains("O")) { result |= Keys.O; }
if (keys.Contains("P")) { result |= Keys.P; }
if (keys.Contains("Q")) { result |= Keys.Q; }
if (keys.Contains("R")) { result |= Keys.R; }
if (keys.Contains("S")) { result |= Keys.S; }
if (keys.Contains("T")) { result |= Keys.T; }
if (keys.Contains("U")) { result |= Keys.U; }
if (keys.Contains("V")) { result |= Keys.V; }
if (keys.Contains("W")) { result |= Keys.W; }
if (keys.Contains("X")) { result |= Keys.X; }
if (keys.Contains("Y")) { result |= Keys.Y; }
if (keys.Contains("Z")) { result |= Keys.Z; }
if (keys.Contains("0")) { result |= Keys.D0; }
if (keys.Contains("1")) { result |= Keys.D1; }
if (keys.Contains("2")) { result |= Keys.D2; }
if (keys.Contains("3")) { result |= Keys.D3; }
if (keys.Contains("4")) { result |= Keys.D4; }
if (keys.Contains("5")) { result |= Keys.D5; }
if (keys.Contains("6")) { result |= Keys.D6; }
if (keys.Contains("7")) { result |= Keys.D7; }
if (keys.Contains("8")) { result |= Keys.D8; }
if (keys.Contains("9")) { result |= Keys.D9; }
if (keys.Contains("F1")) { result |= Keys.F1; }
if (keys.Contains("F2")) { result |= Keys.F2; }
if (keys.Contains("F3")) { result |= Keys.F3; }
if (keys.Contains("F4")) { result |= Keys.F4; }
if (keys.Contains("F5")) { result |= Keys.F5; }
if (keys.Contains("F6")) { result |= Keys.F6; }
if (keys.Contains("F7")) { result |= Keys.F7; }
if (keys.Contains("F8")) { result |= Keys.F8; }
if (keys.Contains("F9")) { result |= Keys.F9; }
if (keys.Contains("F10")) { result |= Keys.F10; }
if (keys.Contains("F11")) { result |= Keys.F11; }
if (keys.Contains("F12")) { result |= Keys.F12; }
tsmi.ShortcutKeys = result;
}
/// <summary>
/// 特性 RemarkAttribute,用在函数上,其 Remark 属性决定了
/// 积分函数 Integration 应该选择程序中的哪个函数进行计算
/// </summary>
[AttributeUsage(AttributeTargets.Method)]
public class RemarkAttribute : Attribute
{
string remark;
public string Remark
{
get { return remark; }
}
//构造函数
public RemarkAttribute(string comment)
{
remark = comment;
}
}
/// <summary>
/// 单击一个ToolStripMenuItem后触发的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
//如果Tag为空,则不执行任何事件
if (string.IsNullOrWhiteSpace((string)((ToolStripMenuItem)sender).Tag))
{
return;
}
//如果Tag存在,则寻找具有和Tag内容一致特性的函数并调用
FunctionInvoke((string)((ToolStripMenuItem)sender).Tag);
}
/// <summary>
/// 调用具有指定特性名的函数
/// </summary>
/// <param name="funcattr">函数的RemarkAttribute特性值</param>
private void FunctionInvoke(string funcattr)
{
//需要 using System.Reflection;
MethodInfo[] mi = typeof(FormMain).GetMethods(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
//找到具有指定特性的函数,进行调用
foreach (MethodInfo m in mi)
{
Type t2 = typeof(RemarkAttribute);
RemarkAttribute ra = (RemarkAttribute)Attribute.GetCustomAttribute(m, t2);
if (ra != null && ra.Remark == funcattr)
{
m.Invoke(this, new object[] { });
break;
}
}
}
//需要调用的函数
[RemarkAttribute("ColorToRed")] //窗口底色:红
private void ChangeColorToRed() { this.BackColor = Color.Red; }
[RemarkAttribute("ColorToLawnGreen")] //窗口底色:绿
private void ChangeColorToLawnGreen() { this.BackColor = Color.LawnGreen; }
[RemarkAttribute("FormNormal")] //窗口大小:普通
private void ChangeSizeToNrm() { this.WindowState = FormWindowState.Normal; }
[RemarkAttribute("FormMinimize")] //窗口大小:最小化
private void ChangeSizeToMin() { this.WindowState = FormWindowState.Minimized; }
[RemarkAttribute("FormMaximize")] //窗口大小:最大化
private void ChangeSizeToMax() { this.WindowState = FormWindowState.Maximized; }
[RemarkAttribute("FormClose")] //退出程序
private void CloseForm() { Application.Exit(); }
[RemarkAttribute("FormAbout")] //关于程序
private void AboutForm() { MessageBox.Show("Write By Tsybius 2014/5/15"); }
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有