1. 准备一个xml文件 > 2.准备一个xml schemal文件来验证xml文件 <?xml version="1.0" encoding="UTF-8"?><!-- edited with XMLSpy v2006 sp2 U (http://www.altova.com) by peter (hust) --><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="Menu"> <xs:complexType> <xs:sequence> <xs:element ref="MenuItem" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="MenuItem"> <xs:complexType> <xs:sequence> <xs:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="AddToolButton"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="TRUE"/> <xs:enumeration value="FALSE"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="AddToolbar"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="TRUE"/> <xs:enumeration value="FALSE"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="AssemblyName" type="xs:string" use="required"/> <xs:attribute name="FormTag" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="TRUE"/> <xs:enumeration value="FALSE"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="Image" type="xs:string"/> <xs:attribute name="Name" type="xs:string" use="required"/> <xs:attribute name="ShortCut" use="optional"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="F1"/> <xs:enumeration value="F2"/> <xs:enumeration value="F3"/> <xs:enumeration value="F4"/> <xs:enumeration value="F5"/> <xs:enumeration value="F6"/> <xs:enumeration value="F7"/> <xs:enumeration value="F8"/> <xs:enumeration value="F9"/> <xs:enumeration value="F10"/> <xs:enumeration value="F11"/> <xs:enumeration value="F12"/> <xs:enumeration value="Alt0"/> <xs:enumeration value="Alt1"/> <xs:enumeration value="Alt2"/> <xs:enumeration value="Alt3"/> <xs:enumeration value="Alt4"/> <xs:enumeration value="Alt5"/> <xs:enumeration value="Alt6"/> <xs:enumeration value="Alt7"/> <xs:enumeration value="Alt8"/> <xs:enumeration value="Alt9"/> <xs:enumeration value="AltBksp"/> <xs:enumeration value="AltF1"/> <xs:enumeration value="AltF2"/> <xs:enumeration value="AltF3"/> <xs:enumeration value="AltF4"/> <xs:enumeration value="AltF5"/> <xs:enumeration value="AltF6"/> <xs:enumeration value="AltF7"/> <xs:enumeration value="AltF8"/> <xs:enumeration value="AltF9"/> <xs:enumeration value="AltF10"/> <xs:enumeration value="AltF11"/> <xs:enumeration value="AltF12"/> <xs:enumeration value="AltDownArrow"/> <xs:enumeration value="AltUpArrow"/> <xs:enumeration value="AltLeftArrow"/> <xs:enumeration value="AltRightArrow"/> <xs:enumeration value="Ctrl0"/> <xs:enumeration value="Ctrl1"/> <xs:enumeration value="Ctrl2"/> <xs:enumeration value="Ctrl3"/> <xs:enumeration value="Ctrl4"/> <xs:enumeration value="Ctrl5"/> <xs:enumeration value="Ctrl6"/> <xs:enumeration value="Ctrl7"/> <xs:enumeration value="Ctrl8"/> <xs:enumeration value="Ctrl9"/> <xs:enumeration value="CtrlA"/> <xs:enumeration value="CtrlB"/> <xs:enumeration value="CtrlC"/> <xs:enumeration value="CtrlD"/> <xs:enumeration value="CtrlE"/> <xs:enumeration value="CtrlF"/> <xs:enumeration value="CtrlG"/> <xs:enumeration value="CtrlH"/> <xs:enumeration value="CtrlI"/> <xs:enumeration value="CtrlJ"/> <xs:enumeration value="CtrlK"/> <xs:enumeration value="CtrlL"/> <xs:enumeration value="CtrlM"/> <xs:enumeration value="CtrlN"/> <xs:enumeration value="CtrlO"/> <xs:enumeration value="CtrlP"/> <xs:enumeration value="CtrlQ"/> <xs:enumeration value="CtrlR"/> <xs:enumeration value="CtrlS"/> <xs:enumeration value="CtrlT"/> <xs:enumeration value="CtrlU"/> <xs:enumeration value="CtrlV"/> <xs:enumeration value="CtrlX"/> <xs:enumeration value="CtrlY"/> <xs:enumeration value="CtrlZ"/> <xs:enumeration value="CtrlF1"/> <xs:enumeration value="CtrlF2"/> <xs:enumeration value="CtrlF3"/> <xs:enumeration value="CtrlF4"/> <xs:enumeration value="CtrlF5"/> <xs:enumeration value="CtrlF6"/> <xs:enumeration value="CtrlF7"/> <xs:enumeration value="CtrlF8"/> <xs:enumeration value="CtrlF9"/> <xs:enumeration value="CtrlF10"/> <xs:enumeration value="CtrlF11"/> <xs:enumeration value="CtrlF12"/> <xs:enumeration value="CtrlIns"/> <xs:enumeration value="CtrlShift0"/> <xs:enumeration value="CtrlShift1"/> <xs:enumeration value="CtrlShift2"/> <xs:enumeration value="CtrlShift3"/> <xs:enumeration value="CtrlShift4"/> <xs:enumeration value="CtrlShift5"/> <xs:enumeration value="CtrlShift6"/> <xs:enumeration value="CtrlShift7"/> <xs:enumeration value="CtrlShift8"/> <xs:enumeration value="CtrlShift9"/> <xs:enumeration value="CtrlShiftA"/> <xs:enumeration value="CtrlShiftB"/> <xs:enumeration value="CtrlShiftC"/> <xs:enumeration value="CtrlShiftD"/> <xs:enumeration value="CtrlShiftE"/> <xs:enumeration value="CtrlShiftF"/> <xs:enumeration value="CtrlShiftG"/> <xs:enumeration value="CtrlShiftH"/> <xs:enumeration value="CtrlShiftI"/> <xs:enumeration value="CtrlShiftJ"/> <xs:enumeration value="CtrlShiftK"/> <xs:enumeration value="CtrlShiftL"/> <xs:enumeration value="CtrlShiftM"/> <xs:enumeration value="CtrlShiftN"/> <xs:enumeration value="CtrlShiftO"/> <xs:enumeration value="CtrlShiftP"/> <xs:enumeration value="CtrlShiftQ"/> <xs:enumeration value="CtrlShiftR"/> <xs:enumeration value="CtrlShiftS"/> <xs:enumeration value="CtrlShiftT"/> <xs:enumeration value="CtrlShiftU"/> <xs:enumeration value="CtrlShiftV"/> <xs:enumeration value="CtrlShiftW"/> <xs:enumeration value="CtrlShiftX"/> <xs:enumeration value="CtrlShiftY"/> <xs:enumeration value="CtrlShiftZ"/> <xs:enumeration value="ShiftIns"/> <xs:enumeration value="ShiftF1"/> <xs:enumeration value="ShiftF2"/> <xs:enumeration value="ShiftF3"/> <xs:enumeration value="ShiftF4"/> <xs:enumeration value="ShiftF5"/> <xs:enumeration value="ShiftF6"/> <xs:enumeration value="ShiftF7"/> <xs:enumeration value="ShiftF8"/> <xs:enumeration value="ShiftF9"/> <xs:enumeration value="ShiftF10"/> <xs:enumeration value="ShiftF11"/> <xs:enumeration value="ShiftF12"/> <xs:enumeration value=""/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element></xs:schema> 3。定义一个类来加载菜单 public class MenuLoad } 这里面用到了delegate,最重要的函数是加载菜单的函数和OnPluginClick函数。使用这个框架可以动态增加任意的层次的模块。微软的CAB 使用Resigster site方式来增加模块,感觉不是很方便。 相关文章: 2022-01-15 2021-10-08 2022-12-23 2021-09-22 2021-11-16 2021-12-09 2022-12-23 2022-12-23