打印本文 打印本文 关闭窗口 关闭窗口
一个简单的基于XML的模块集成框架(3)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1364  更新时间:2009/4/23 11:18:46  文章录入:mintao  责任编辑:mintao
     /**//// <summary>
   /// 加载所有子菜单
   /// </summary>
   /// <param name="main">主菜单集合</param>
   /// <param name="node">菜单节点集合</param>
   private void GetSubMenus(IconPanel[] iplist ,OfficeMenuItem[] main, XmlNode[] node)
   {
   EventHandler handler = new EventHandler(OnPluginClick);
   EventHandler handler1 = new EventHandler(OnIconClick);
   EventHandler handler2 = new EventHandler(OnButtonClick);
   string asmname;
   string formtag;
   string text;
   MenuClass mc;
   XmlNode child;
   string iconpath = "";
   string iconname = "";
   string msc = "";
   for(int i = 0; i <= main.GetUpperBound(0); i++)
   {
   //foreach(XmlNode child in node[i].ChildNodes)
   for(int j = 0; j < node[i].ChildNodes.Count;j++ )
   {
   child = node[i].ChildNodes[j];
   if(child.NodeType == XmlNodeType.Element && child.Name == "MenuItem")
   {
   asmname = child.Attributes["AssemblyName"].Value;
   formtag = child.Attributes["FormTag"].Value;
   text = child.Attributes["Name"].Value;
   msc = child.Attributes["ShortCut"].Value;
   OfficeMenuItem item = new OfficeMenuItem(true, text, handler);
   iconname = child.Attributes["Image"].Value;
   if(iconname != string.Empty)
   {
   iconpath = Themes.GetCurrentThemePath() +iconname;
   item.IconPath = iconpath;
  
   }
   mc = new MenuClass();
   mc.Assemblyname = asmname;
   mc.FormTag = formtag;
  
   item.Tag = mc;
  
   if(msc != string.Empty)
   {
   item.Shortcut = MenuShortCut.GetShortCut(msc);
   }
  
   main[i].MenuItems.Add(item);
  
   if((iconpath != string.Empty) && System.IO.File.Exists(iconpath))
   { //添加按钮到OutlookBar
   PanelIcon picon = iplist[i].AddIcon(item.Text,Image.FromFile(iconpath),handler1);
   picon.Tag = mc;
   //添加按钮到toolbar
   ToolStripButton button = new ToolStripButton(item.Text, Image.FromFile(iconpath), handler2);
   button.DisplayStyle = ToolStripItemDisplayStyle.Image;
   button.ToolTipText = item.Text;
   button.Tag = mc;
   button.Visible = true;
   _toolbar.Items.Add(button);
   }
  
   iconpath = "";
   mc = null;
  
   if(child.ChildNodes.Count > 0)
   {
   GetChildMenu(iplist[i],item, child);
   }
   }
   }
   //添加分割线
   ToolStripSeparator ss = new ToolStripSeparator();
   _toolbar.Items.Add(ss);
   }
   }
  
   /**//// <summary>
   /// 加载子菜单
   /// </summary>
   /// <param name="parent">父菜单</param>
   /// <param name="node">父菜单定义XML节点</param>
   private void GetChildMenu(IconPanel ip,OfficeMenuItem parent, XmlNode node)
   {
   EventHandler handler = new EventHandler(OnPluginClick);
   EventHandler handler1 = new EventHandler(OnIconClick);
   EventHandler handler2 = new EventHandler(OnButtonClick);
  
   MenuClass mc;
   string asmname;
   string formtag;
   string text;
   XmlNode child1;
   string iconpath = "";
   string iconname = "";
   string msc = "";
   //foreach(XmlNode child1 in node.ChildNodes)
   for(int i = 0; i < node.ChildNodes.Count - 1;i++ )
   {
   child1 = node.ChildNodes[i];
   //检查是否提供了类型
   asmname = child1.Attributes["AssemblyName"].Value;
   formtag = child1.Attributes["FormTag"].Value;
   text = child1.Attributes["Name"].Value;
   OfficeMenuItem childitem;
  
   childitem = new OfficeMenuItem(true, text, handler);
   childitem.Name = text;
   mc = new MenuClass();
   mc.Assemblyname = asmname;
   mc.FormTag = formtag;
  
   childitem.Tag = mc;
   //添加快捷键
   msc = child1.Attributes["ShortCut"].Value;
   if(msc != string.Empty)
   {
   childitem.Shortcut = MenuShortCut.GetShortCut(msc);
   }
   //添加图标
   iconname = child1.Attributes["Image"].Value;
   if(iconname != string.Empty)
   {
   iconpath = Themes.GetCurrentThemePath() + iconname;
   childitem.IconPath = iconpath;
   }
  
   parent.MenuItems.Add(childitem);
  
   if((iconpath != string.Empty) && System.IO.File.Exists(iconpath))
   { //添加按钮到OutlookBar
   PanelIcon picon = ip.AddIcon(childitem.Text, Image.FromFile(iconpath), handler1);
   picon.Tag = mc;
   //添加按钮到toolbar
   ToolStripButton button = new ToolStripButton(childitem.Text, Image.FromFile(iconpath), handler2);
   button.DisplayStyle = ToolStripItemDisplayStyle.Image;
   button.ToolTipText = childitem.Text;
   button.Tag = mc;
   button.Visible = true;
   _toolbar.Items.Add(button);
   }
  
   iconpath = "";
   mc = null;
  
   if(child1.ChildNodes.Count > 0)
   {
   GetChildMenu(ip,childitem, child1);
   }
   }
   }
  
   /**//// <summary>
   /// 打开一个窗体
   /// </summary>
   /// <param name="asmname">窗体类程序集和窗体类的组合,从节点的AssemblyName属性获取</param>
   private void OpenForm(MenuClass mc)
   {
   string asmname = mc.Assemblyname;
   string formtag = mc.FormTag;
  
   if (formtag == "")
   {
   throw new Exception(Resources.StringNoFormFlag);
   }
  
   if(formtag.ToUpper() == "TRUE")
   {
   if(asmname == string.Empty)
   {
   throw new NullReferenceException(Resources.StringAssemblyNull);
   }
  
  
   //string[] a = asmname.Split(',');
   obje

[1] [2]  下一页

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