I'm working on an older .NET code base that has all the designer code stuffed into the same code file as my code (pre - partial classes).
Is there a mechanism to tell Visual Studio 2008 to go back and refactor designer code into a X.designer.cs partial class file?
Is the solution file of the older .NET code 2003/2005? I've tried to do what you're talking about by using the conversion wizard in VS2008. During conversion it should try to parse your .aspx pages and build designer files for them. What the designer generator has a problem with is that these older .aspx pages are so malformed that they simply can't be parsed.
I've come to the realization that perhaps trying to convert old ASP.NET code up to 2.0 or 3.5 is, in itself, going to be a large project. I have not yet found an effective way to factor out the designer code from old existing code, so I'd also be happy to learn of a solution here.
I have had good luck with the free stand-alone application DeCodEx (Designer Code Extractor).
DeCodeEx loads in a Visual Studio project, detects which files are WinForms, and automatically splits designer code out of the original
.cs
or.vb
file into a new.designer.cs
or.designer.vb
file.For large projects it is much easier than trying to manually split out the files yourself.
What I just did was completely manually:
a) Remove the components object you might have in your original Winform. If the application was .NET 1.1 you will have something like this:
b) Add a new components object in the Designer class:
c) Unless you had a specific dispose method, this is the standard. If you don't have any form Inheritance, I think that base.Dispose can be safety removed:
d) Copy all the code inside the #region Windows Form Designer generated code to the new Designer.cs class.
e) You should also copy all the member variables for all your objects (labels, texboxes, etc. that you use in the designer).
That should be all about it. Save and compile.
Remember that a partial class can be split among N number of files, but all must share the SAME namespace.
Is it worthwhile? Well, in my case, I had a bunch of huge winforms with tons of code and controls. VS2008 crawled every time I switched from/to designer. This made the code view more responsive. I remember having to wait for 3-5 seconds before having a responsive code. Now it takes 1…
UPDATE:
Doing steps 1 to 5 and moving an existing or adding a new control won't automatically move anything to the designer.cs class. New stuff goes to the new Designer class, but old stuff remains where it was, unfortunately.
You also have to close and reopen the file (after you have added/created the partial class) for VS to draw correctly in the Designer; failure to do may result in empty forms being drawn.
I'd be interested to see what happens if you open one of these forms in the designer and save it; or modify it and save it; or do one of the above after creating a .designer.cs file with only an empty shell of the partial class. It wouldn't surprise me to find the designer placing at least the changes into the .designer.cs file.
If anyone is still looking for an automated method of doing this there's a VS macro here that will do most of it for you.
A very nice tool.
To merge the yourForm.designer.cs to yourForm.cs, Follow the below steps
Edit
.csproj
in notepad and add the following code