/// <summary> /// 从插件方案中查找<see cref="MenuStrip"/>对应的插件,加载插件 /// </summary> /// <param name="menuStrip"></param> /// <param name="pluginPlan"></param> /// <param name="cmdData">插件命令的传入参数,泛型对象</param> public static void LoadPlugins <TCmdData>(this MenuStrip menuStrip, IPluginPlan pluginPlan, TCmdData cmdData) { var form = menuStrip.FindForm(); var view = pluginPlan.QueryViews(form); //找到窗体对应的插件视图 var container = QueryContainer(view, menuStrip); //找到控件对应的插件容器 menuStrip.LoadPluginContainer(container); //向控件加载插件容器包含的插件 container.LoadPluginCommands(cmdData); //创建容器包含的插件对应的命令 }
public MenuStripDBusMenu(MenuStrip menu) { if (menu == null) { throw new ArgumentNullException("menu"); } lock (mLockObject) { mMenuParentForm = menu.FindForm(); mMenuItemList = new List <IMenuItemProxy>(); mMenuItemList.Insert(0, new MenuStripProxy(menu)); AddItemsToMenuItemList(menu.Items); } }
/// <summary> /// 向插件窗口的<see cref="MenuStrip"/>加载插件 /// </summary> /// <param name="container"></param> /// <param name="menuStrip"></param> public static void LoadPluginContainer(this MenuStrip menuStrip, IPluginContainer container) { var form = menuStrip.FindForm(); foreach (var subContainer in container.SubContainers) { var menuItem = CreateMenuItem(container); menuStrip.Items.Add(menuItem); foreach (var container1 in subContainer.SubContainers) { LoadPluginContainer(subContainer, menuItem, form); } } foreach (var plugin in container.Plugins) { menuStrip.Items.Add(CreateMenuItem(plugin, form)); } }
/// <summary> /// Tracks the commands. /// </summary> /// <param name="strip">The strip.</param> public static void TrackCommands(MenuStrip strip) { TrackCommands(strip, strip.FindForm()); }