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);