I have never been able to successfully add a Form
from an existing file to a new project.
I read on a blog that you add just the *.cs file and the depen
After some more research I discovered the source of the issue. It is correct that all one has to import is the *.cs
file. The caveat lies in the project type. If working in a Class Library project, another step must be performed.
System.Windows.Forms.dll
and System.Drawing
.*.cs
fileNotes:
A. The files are only properly recognized after I performed these steps and then tried to open the file. Suddenly VS "wakes up" and fixes the files.
B. Order of the steps does not matter. If you already imported *.cs files, just fix the references.
C. If one is missing other references e.g. DevExpress or other 3rd party control imports), the *.cs files will not display properly until this has been resolved.
Just add the form file(form.vb or form.cs) other files will be created automatically.
If you want to create a library of windows forms it is better if you create a Windows Forms Application project. Then delete the default form (Form1), go to the project properties and change the Output Type (or project type) from Windows Forms Application to Class Library.
This way the output will be a DLL but it will have the references you need for a windows forms project. As you pointed out, when adding existing items do NOT add their corresponding .Designer and .resx files, just add their top level/main file.
This worked for me just now (I have the same problem as you). 1. Created new winform with the same name, added something to it (so the resx file is created), saved and closed. 2. Replace newly created files with your original form. 3. Done
All you have to is to pass the .cs file. (The code file)
Sorry P.Brian.Mackey, your solution didn't work for me. It did improve it by getting VS to recognise that it was a form rather than a code file, i.e. gave it is Icon (imagine it added Form)
But only way I managed to fix the issue fully was to edit the csproj file manually in a text editor. I'm not really convinced that this is a great solution and is potentially quite dangerous, especially given I made two typing mistakes and completely broke the project but it did work once I got it right. It’s also hard to find the mistakes like not closing the tags properly or forgetting a file extention.
So the project started out with these entries after adding the files via 'Add --> Existing Item' :(P.s. I'm certain you don't have to copy the files into the project folders first, just navigate to where they are stored outside the project and VS will copy them to the folder which you right clicked on. Copy in advance of course works too.)
<Compile Include="Reports\GBudget1Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget1Report.Designer.cs" />
<Compile Include="Reports\GBudget2Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget2Report.Designer.cs" />
<Compile Include="Reports\LASHForm.cs">
<SubType>Form</SubType>
</Compile>
and further down in the file:
<EmbeddedResource Include="Reports\GBudget1Report.resx" />
<EmbeddedResource Include="Reports\GBudget2Report.resx" />
Comparing these with the existing forms in the project which were working correctly (other option is if you haven't got one, is to create a new form in Visual Studio and it'll give you the correct mark-up to copy) I discovered that the DependentUpon tag isn't associating the sub files to the main form code file.
So I edited it by hand to match:
<Compile Include="Reports\GBudget1Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget1Report.Designer.cs">
<DependentUpon>GBudget1Report.cs</DependentUpon>
</Compile>
<Compile Include="Reports\GBudget2Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget2Report.Designer.cs">
<DependentUpon>GBudget2Report.cs</DependentUpon>
</Compile>
Again further down the file:
<EmbeddedResource Include="Reports\GBudget1Report.resx">
<DependentUpon>GBudget1Report.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\GBudget2Report.resx">
<DependentUpon>GBudget2Report.cs</DependentUpon>
</EmbeddedResource>
It's not a solution I like, but it works. If anyone has any better solutions, I'm happy to listen.