diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
index 86a11c9443..bfa997243a 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
@@ -25,7 +25,7 @@ using ReflectionLayer = ICSharpCode.SharpDevelop.Dom.ReflectionLayer;
namespace ICSharpCode.FormsDesigner
{
- public abstract class AbstractDesignerGenerator : IDesignerGenerator
+ public abstract class AbstractDesignerGenerator : IDesignerGenerator2
{
/// The currently open part of the class being designed.
IClass currentClassPart;
@@ -211,6 +211,18 @@ namespace ICSharpCode.FormsDesigner
{
}
+ public virtual void NotifyFormRenamed(string newName)
+ {
+ Reparse();
+ LoggingService.Info("Renaming form to " + newName);
+ if (this.formClass == null) {
+ LoggingService.Warn("Cannot rename, formClass not found");
+ } else {
+ ICSharpCode.SharpDevelop.Refactoring.FindReferencesAndRenameHelper.RenameClass(this.formClass, newName);
+ Reparse();
+ }
+ }
+
public virtual void MergeFormChanges(CodeCompileUnit unit)
{
Reparse();
@@ -238,14 +250,6 @@ namespace ICSharpCode.FormsDesigner
return;
}
- if (formClass.Name != this.formClass.Name) {
- LoggingService.Info("Renaming form to " + formClass.Name);
- ICSharpCode.SharpDevelop.Refactoring.FindReferencesAndRenameHelper.RenameClass(this.formClass, formClass.Name);
- this.ViewContent.DesignerCodeFile.MakeDirty();
- this.ViewContent.PrimaryFile.MakeDirty();
- Reparse();
- }
-
FixGeneratedCode(this.formClass, initializeComponent);
// generate file and get initialize components string
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs
index b539c0c56a..f96b40d03f 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs
@@ -37,4 +37,9 @@ namespace ICSharpCode.FormsDesigner
bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out string file, out int position);
ICollection GetCompatibleMethods(EventDescriptor edesc);
}
+
+ public interface IDesignerGenerator2 : IDesignerGenerator
+ {
+ void NotifyFormRenamed(string newName);
+ }
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
index 726f68da48..93ff7a678d 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
@@ -369,7 +369,20 @@ namespace ICSharpCode.FormsDesigner
bool loading = this.loader != null && this.loader.Loading;
LoggingService.Debug("Forms designer: ComponentChanged: " + (e.Component == null ? "" : e.Component.ToString()) + ", Member=" + (e.Member == null ? "" : e.Member.Name) + ", OldValue=" + (e.OldValue == null ? "" : e.OldValue.ToString()) + ", NewValue=" + (e.NewValue == null ? "" : e.NewValue.ToString()) + "; Loading=" + loading + "; Unloading=" + this.unloading);
if (!loading && !unloading) {
- this.MakeDirty();
+ try {
+ this.MakeDirty();
+ if (e.Component != null && e.Component == Host.RootComponent
+ && e.Member != null && e.Member.Name == "Name" && e.NewValue is string
+ && !object.Equals(e.OldValue, e.NewValue))
+ {
+ // changing the name of the form
+ IDesignerGenerator2 gen2 = generator as IDesignerGenerator2;
+ if (gen2 != null)
+ gen2.NotifyFormRenamed((string)e.NewValue);
+ }
+ } catch (Exception ex) {
+ MessageService.ShowError(ex);
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
index 4235d30ed7..d5c517c635 100644
--- a/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
+++ b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
@@ -130,6 +130,10 @@ namespace ICSharpCode.SharpDevelop.Refactoring
public static void RenameClass(IClass c, string newName)
{
+ if (c == null)
+ throw new ArgumentNullException("c");
+ if (newName == null)
+ throw new ArgumentNullException("newName");
c = c.GetCompoundClass(); // get compound class if class is partial
List list = RefactoringService.FindReferences(c, null);