private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { flowLayoutPanel1.Controls.Clear(); label1.Text = "系统设置"; NavBtnItem btnItem = new NavBtnItem(); btnItem.Text = "通讯设置"; btnItem.SelectedChanged += new NavBtnItem.SelectedHandler(btnItemSysteConfig_SelectedChanged); btnItem.Tag = "LydTOPDP.FrmSysSetting"; flowLayoutPanel1.Controls.Add(btnItem); FlowLayoutPanel flowPanel = new FlowLayoutPanel(); flowPanel.Padding = new Padding(10, 5, 5, 5); flowPanel.AutoScroll = true; flowPanel.Dock = DockStyle.Fill; panel4.Controls.Clear(); panel4.Controls.Add(flowPanel); }
protected void btnItem_SelectedChanged(object sender, EventArgs e) { #region 判断当前是否存在打开的插件 if (currentBtn != null && currentBtn.Equals(sender)) { return; } else { } if (currentPluginForm != null) { if (currentPluginForm.CloseForm() == DialogResult.Cancel) { (sender as NavBtnItem).Selected = false; return; } } #endregion currentBtn = sender as NavBtnItem; SetPrograss("就绪", " ", 0); foreach (NavBtnItem item in flowLayoutPanel1.Controls) { item.Selected = false; } (sender as NavBtnItem).Selected = true; PluginModel pp = (sender as NavBtnItem).Tag as PluginModel; Assembly ass = Assembly.LoadFrom(pp.LibPath); Environment.CurrentDirectory = System.IO.Path.GetDirectoryName(pp.LibPath); string pluginClassName = ass.GetName().Name + "." + (sender as NavBtnItem).Tag2; string guid = (sender as NavBtnItem).Tag2.ToString(); //foreach (PluginModel pm in pp.Items) //{ // if (guid == pm.GUID) // { // pluginClassName = pm.Namesapce + "." + pm.Name; // break; // } //} Type tp = ass.GetType(pluginClassName); if (tp == null) { MessageBox.Show("插件加载失败:" + pluginClassName); return; } Environment.CurrentDirectory = System.IO.Path.GetDirectoryName(pp.LibPath); Form pluginClass = Activator.CreateInstance(tp) as Form; if (pluginClass is PluginLib.BaseForm) { currentPluginForm = pluginClass as PluginLib.BaseForm; } else { currentPluginForm = null; } pluginClass.TopLevel = false; pluginClass.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom; pluginClass.Dock = DockStyle.Top; pluginClass.FormBorderStyle = FormBorderStyle.None; panel4.Controls.Clear(); panel4.Controls.Add(pluginClass); pluginClass.Visible = true; //pluginClassName = pp.Namespace + ".Plugin"; tp = ass.GetType(pluginClassName); tp = tp.BaseType; #region 为plugin.cs文件中的消息处理事件添加委托方法 EventInfo eiMessage = tp.GetEvent("message"); eiMessage.RemoveEventHandler(this, Delegate.CreateDelegate(eiMessage.EventHandlerType, this, "WriteMessage")); eiMessage.AddEventHandler(this, Delegate.CreateDelegate(eiMessage.EventHandlerType, this, "WriteMessage")); EventInfo eiClear = tp.GetEvent("clear"); eiClear.RemoveEventHandler(this, Delegate.CreateDelegate(eiClear.EventHandlerType, this, "ClearMessage")); eiClear.AddEventHandler(this, Delegate.CreateDelegate(eiClear.EventHandlerType, this, "ClearMessage")); EventInfo eiPushData = tp.GetEvent("pushData"); eiPushData.RemoveEventHandler(this, Delegate.CreateDelegate(eiPushData.EventHandlerType, this, "PushData")); eiPushData.AddEventHandler(this, Delegate.CreateDelegate(eiPushData.EventHandlerType, this, "PushData")); EventInfo eiPopupData = tp.GetEvent("popupData"); eiPopupData.RemoveEventHandler(this, Delegate.CreateDelegate(eiPopupData.EventHandlerType, this, "PopupData")); eiPopupData.AddEventHandler(this, Delegate.CreateDelegate(eiPopupData.EventHandlerType, this, "PopupData")); EventInfo eiPrograss = tp.GetEvent("PrograssInfo"); eiPrograss.RemoveEventHandler(this, Delegate.CreateDelegate(eiPrograss.EventHandlerType, this, "SetPrograss")); eiPrograss.AddEventHandler(this, Delegate.CreateDelegate(eiPrograss.EventHandlerType, this, "SetPrograss")); EventInfo eiPrograssMaxValue = tp.GetEvent("ProgressMaxValue"); eiPrograssMaxValue.RemoveEventHandler(this, Delegate.CreateDelegate(eiPrograssMaxValue.EventHandlerType, this, "SetProgressMaxValue")); eiPrograssMaxValue.AddEventHandler(this, Delegate.CreateDelegate(eiPrograssMaxValue.EventHandlerType, this, "SetProgressMaxValue")); EventInfo resetProgressMaxValue = tp.GetEvent("resetProgressMaxValue"); resetProgressMaxValue.RemoveEventHandler(this, Delegate.CreateDelegate(resetProgressMaxValue.EventHandlerType, this, "ResetProgressMaxValue")); resetProgressMaxValue.AddEventHandler(this, Delegate.CreateDelegate(resetProgressMaxValue.EventHandlerType, this, "ResetProgressMaxValue")); EventInfo eiLogOpt = tp.GetEvent("LogOperatorInfo"); eiLogOpt.RemoveEventHandler(this, Delegate.CreateDelegate(eiLogOpt.EventHandlerType, this, "LogOperatorInfo")); eiLogOpt.AddEventHandler(this, Delegate.CreateDelegate(eiLogOpt.EventHandlerType, this, "LogOperatorInfo")); EventInfo eiLogSystem = tp.GetEvent("LogSystemInfo"); eiLogSystem.RemoveEventHandler(this, Delegate.CreateDelegate(eiLogSystem.EventHandlerType, this, "LogSystemInfo")); eiLogSystem.AddEventHandler(this, Delegate.CreateDelegate(eiLogSystem.EventHandlerType, this, "LogSystemInfo")); #endregion #region 递通讯方式信息 CommunicationData data = ConfigDataService.GetCommunicationData(); Object pgClass = Activator.CreateInstance(tp); MethodInfo methodInfo = tp.GetMethod("SetSerialPort"); methodInfo.Invoke(pgClass, new object[] { data.Serialport, data.Baudrate }); methodInfo = tp.GetMethod("SetNetwork"); methodInfo.Invoke(pgClass, new object[] { data.IP, data.Localport, data.Remoteport }); #endregion }
private void navLeftMenu1_NavButtonItemClick(object sender, EventArgs e) { #region 判断当前是否存在打开的插件 if (currentPluginForm != null) { if (currentPluginForm.CloseForm() == DialogResult.Cancel) { return; } currentPluginForm = null; } #endregion flowLayoutPanel1.Controls.Clear(); panel4.Controls.Clear(); SetPrograss("就绪", " ", 0); FlowLayoutPanel flp = new FlowLayoutPanel(); panel4.Controls.Add(flp); flp.Dock = DockStyle.Fill; flp.Visible = true; label1.Text = (sender as Button).Text; label1.Tag = (sender as Button).Tag; #region 查找插件 PluginService pgService = new PluginService(); IList <PluginModel> items = pgService.GetPluginItems(int.Parse(label1.Tag.ToString())); string sortXml = AppDomain.CurrentDomain.BaseDirectory + @"/ConfigData/pluginSort.xml"; XmlDocument xmlDocSort = new XmlDocument(); xmlDocSort.Load(sortXml); XmlNodeList funItemList = xmlDocSort.SelectNodes("sort/fun_" + int.Parse(label1.Tag.ToString()) + "/item"); foreach (XmlNode el in funItemList) { //foreach (PluginPro item in items) //{ //if (item.Items == null) continue; foreach (PluginModel pm in items) { if (el.Attributes["guid"].Value == pm.GUID) { NavBtnItem btnItem = new NavBtnItem(); btnItem.Text = pm.Text; btnItem.SelectedChanged += new NavBtnItem.SelectedHandler(btnItem_SelectedChanged); btnItem.Tag = pm; btnItem.Tag1 = pm.LibPath; btnItem.Tag2 = pm.GUID; flowLayoutPanel1.Controls.Add(btnItem); PictureBox pic = new PictureBox(); pic.Tag = btnItem; pic.Cursor = Cursors.Arrow; pic.Click += delegate(object sender1, EventArgs e1) { NavBtnItem btnItem1 = (NavBtnItem)(sender1 as PictureBox).Tag; btnItem_SelectedChanged(btnItem1, e1); }; pic.MouseMove += delegate(object sender1, MouseEventArgs e1) { pic.Image = global::LYDTOPDP.Properties.Resources.btn11; CreateBtnImage(pic, btnItem.Text); }; pic.MouseLeave += delegate(object sender1, EventArgs e1) { pic.Image = global::LYDTOPDP.Properties.Resources.btn; CreateBtnImage(pic, btnItem.Text); }; pic.Image = global::LYDTOPDP.Properties.Resources.btn; flp.Controls.Add(pic); CreateBtnImage(pic, btnItem.Text); } } //} } #endregion }