打印本文 打印本文 关闭窗口 关闭窗口
一个简单的基于XML的模块集成框架(2)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数666  更新时间:2009/4/23 11:18:47  文章录入:mintao  责任编辑:mintao
     。定义一个类来加载菜单
  
  public class MenuLoad
   {
   private PluginCollection m_plugins = null;
   public MenuBar _menbar = new MenuBar();
   public ToolStrip _toolbar = new ToolStrip();
   private OutlookBar bar = new OutlookBar();
   private ImageList imglist = new ImageList();
   private StringBuilder builder = new StringBuilder();
  
   public MenuLoad()
   {
   bar = _menbar.outlookBar;
   }
  
   private TabControl tabCtrl;
   public TabControl TabCtrl
   {
   set
   {
   tabCtrl = value;
   }
   }
  
   private void ValidationEventHandler(object sender, ValidationEventArgs e)
   {
   builder.AppendLine("验证XML文档的时候发生错误:");
   builder.AppendLine("严重级别:" + e.Severity);
   builder.AppendLine("错误信息:" + e.Message);
   builder.AppendLine("------+--------+-------+------+--------+-------+------+--------+-------+");
   builder.AppendLine();
   }
  
   /**//// <summary>
   /// 验证XML文件是否是合乎规范的文件
   /// </summary>
   /// <param name="xmlfile">文件名称</param>
   /// <returns>是则返回true,否则返回false</returns>
   private bool ValidateXml(string xmlfile)
   {
   bool validXml = false;
   string spath = "";
  
   spath = Application.StartupPath + "\\configurations\\XMLSMenu.xsd";
   if(!System.IO.File.Exists(spath))
   {
   throw new System.IO.FileNotFoundException(String.Format(Resources.StringFileNotFound, spath));
   }
  
   XmlReaderSettings settings = new XmlReaderSettings();
   XmlSchemaSet schemaSet = new XmlSchemaSet();
   schemaSet.Add(null, spath);
   settings.Schemas.Add(schemaSet);
   settings.ValidationType = ValidationType.Schema;
   settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);
   settings.ValidationFlags = settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;
  
   XmlReader reader = XmlReader.Create(xmlfile, settings);
  
  
   while(reader.Read())
   {
  
   }
  
   if(builder.Length > 0)
   {
   validXml = false;
   }
   else
   {
   validXml = true;
   }
   reader.Close();
   return validXml;
  
   }
   /**//// <summary>
   /// 加载菜单
   /// </summary>
   /// <param name="main">主菜单</param>
   /// <param name="xmlfile">菜单定义文件</param>
   public MainMenu LoadMenus(string xmlfile)
   {
   MainMenu mainmenu = new MainMenu();
  
   try
   {
   using(new WaitCursor())
   {
   //验证XML是否是合乎规范的XML文件
   if(ValidateXml(xmlfile))
   {
   XmlDocument document = new XmlDocument();
   document.Load(xmlfile);
  
   XmlNode rootNode = document.DocumentElement;
   mainmenu = GetMenus(rootNode);
   }
   else
   {
   throw new Exception(builder.ToString());
   }
   }
   }
   catch (System.IO.FileNotFoundException)
   {
   Utility.ShowErrorMsg(String.Format(Resources.StringFileNotFound, xmlfile));
   }
  
   return mainmenu;
   }
  
   /**//// <summary>
   /// 加载菜单
   /// </summary>
   /// <param name="main">主菜单</param>
   /// <param name="node">菜单项节点</param>
   private MainMenu GetMenus(XmlNode node)
   {
   MainMenu mainmenu = new MainMenu();
   List<XmlNode> nodelist= new List<XmlNode>();
   List<OfficeMenuItem> mnulist = new List<OfficeMenuItem>();
   List<IconPanel> iplist = new List<IconPanel>();
   string menutext ="";
   //首先加载主菜单,避免迭代的时候菜单显示的过分延迟。
   foreach(XmlNode child in node.ChildNodes)
   {
   if(child.NodeType == XmlNodeType.Element && child.Name == "MenuItem")
   {
   menutext = child.Attributes["Name"].Value;
   OfficeMenuItem item = new OfficeMenuItem(true,menutext);
   mainmenu.MenuItems.Add(item);
   IconPanel cp = new IconPanel();
   bar.AddBand(menutext, cp);
   nodelist.Add(child);
   mnulist.Add(item);
   iplist.Add(cp);
   }
   }
   //加载所有的子菜单
   GetSubMenus(iplist.ToArray(),mnulist.ToArray(), nodelist.ToArray());
   return mainmenu;
   }
  
  
    

打印本文 打印本文 关闭窗口 关闭窗口