diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs index 3de5106cc5..2ab64c7c44 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs @@ -21,16 +21,29 @@ using ICSharpCode.SharpDevelop.Widgets.SideBar; namespace ICSharpCode.FormsDesigner.Gui { - public class CustomComponentsSideTab : SideTabDesigner + public class CustomComponentsSideTab : SideTabDesigner, IDisposable { + bool disposed; + ///Load an assembly's controls public CustomComponentsSideTab(SideBarControl sideTab, string name, IToolboxService toolboxService) : base(sideTab, name, toolboxService) { this.DisplayName = StringParser.Parse(this.Name); ScanProjectAssemblies(); - ProjectService.EndBuild += RescanProjectAssemblies; - ProjectService.SolutionLoaded += RescanProjectAssemblies; + ProjectService.EndBuild += RescanProjectAssemblies; + ProjectService.SolutionLoaded += RescanProjectAssemblies; + ProjectService.ProjectItemAdded += ProjectItemAdded; + } + + public void Dispose() + { + if (!disposed) { + disposed = true; + ProjectService.EndBuild -= RescanProjectAssemblies; + ProjectService.SolutionLoaded -= RescanProjectAssemblies; + ProjectService.ProjectItemAdded -= ProjectItemAdded; + } } void RescanProjectAssemblies(object sender, EventArgs e) @@ -41,6 +54,13 @@ namespace ICSharpCode.FormsDesigner.Gui SharpDevelopSideBar.SideBar.Refresh(); } + void ProjectItemAdded(object sender, ProjectItemEventArgs e) + { + if (e.ProjectItem is ReferenceProjectItem) { + RescanProjectAssemblies(sender, e); + } + } + void ScanProjectAssemblies() { // custom user controls don't need custom images diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/ToolboxProvider.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/ToolboxProvider.cs index 7282fa0712..42385ccae2 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/ToolboxProvider.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/ToolboxProvider.cs @@ -26,8 +26,10 @@ namespace ICSharpCode.FormsDesigner static ICSharpCode.FormsDesigner.Services.ToolboxService toolboxService = null; public static List SideTabs = new List(); - static ComponentLibraryLoader componentLibraryLoader = new ComponentLibraryLoader(); + static CustomComponentsSideTab customTab; + static ComponentLibraryLoader componentLibraryLoader = new ComponentLibraryLoader(); + public static ComponentLibraryLoader ComponentLibraryLoader { get { return componentLibraryLoader; @@ -90,7 +92,7 @@ namespace ICSharpCode.FormsDesigner tab.ItemsExchanged -= SideTabItemsExchanged; if (SharpDevelopSideBar.SideBar.Tabs.Contains(tab)) { SharpDevelopSideBar.SideBar.Tabs.Remove(tab); - reInsertTabs = true;; + reInsertTabs = true; } } reInsertTabs &= doInsert; @@ -108,7 +110,10 @@ namespace ICSharpCode.FormsDesigner } } } - SideTabDesigner customTab = new CustomComponentsSideTab(SharpDevelopSideBar.SideBar, ResourceService.GetString("ICSharpCode.SharpDevelop.FormDesigner.ToolboxProvider.CustomComponents"), toolboxService); + if (customTab != null) { + customTab.Dispose(); + } + customTab = new CustomComponentsSideTab(SharpDevelopSideBar.SideBar, ResourceService.GetString("ICSharpCode.SharpDevelop.FormDesigner.ToolboxProvider.CustomComponents"), toolboxService); customTab.ItemRemoved += SideTabItemRemoved; customTab.ItemsExchanged += SideTabItemsExchanged; SideTabs.Add(customTab);