C# 如何将现有表单添加到新项目中?
我从未能够成功地将C# 如何将现有表单添加到新项目中?,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,我从未能够成功地将表单从现有文件添加到新项目中 我在一篇博客上读到,你只添加了*.cs文件,依赖项就进来了。好吧,我试过了,文件做了dragin并关联了*.designer和*.resx文件。但是,表单图标不显示。相反,该文件看起来像普通的*.cs文件图像。而且,当我双击文件时,我会得到隐藏的代码,而不是表单对象 是否可以添加现有表单并正确识别它们?您实际上需要2个文件: -表格1.cs -Form1.Designer.cs 复制-将它们粘贴到新项目中(只需确保新项目中没有同名的表单)您可以将现
表单
从现有文件添加到新项目中
我在一篇博客上读到,你只添加了*.cs文件,依赖项就进来了。好吧,我试过了,文件做了dragin并关联了*.designer和*.resx文件。但是,表单图标不显示。相反,该文件看起来像普通的*.cs文件图像。而且,当我双击文件时,我会得到隐藏的代码,而不是表单对象
是否可以添加现有表单并正确识别它们?您实际上需要2个文件:
-表格1.cs
-Form1.Designer.cs
复制-将它们粘贴到新项目中(只需确保新项目中没有同名的表单)您可以将现有表单导入到项目中。需要导入的文件取决于用于创建表单的Visual Studio版本 我假设您有两个独立的项目,Foo和Bar,采用不同的解决方案:
C:\
Projects\
Foo\
Foo.sln
Foo.vcproj
Program.cs
Foo.cs
Foo.Designer.cs
Foo.Designer.resx
及
现在,假设您需要将表单Foo导入到项目栏。首先,您需要将Foo附带的所有文件复制到Bar项目文件夹中:
C:\
Projects\
Bar\
Bar.sln
Bar.vcproj
Program.cs
Bar.cs
Bar.Designer.cs
Bar.Designer.resx
Foo.cs
Foo.Designer.cs
Foo.Designer.resx
然后,在Visual Studio中打开Bar.sln,并在解决方案资源管理器中的Bar项目上单击鼠标右键。选择[Add existing item]并在打开的对话框中选择为Foo表单复制的所有文件。确认后,您应该可以在解决方案资源管理器中正确地看到新导入的表单。经过进一步研究,我发现了问题的根源。正确的做法是,只需导入
*.cs
文件。注意事项在于项目类型。如果在类库项目中工作,则必须执行另一个步骤
System.Windows.Forms.dll
和System.Drawing
的引用*.cs
文件C.如果缺少其他引用(例如DevExpress或其他第三方控件导入),*.cs文件将无法正确显示,直到解决此问题。转到解决方案资源管理器,右键单击它,然后添加现有项,在此选择现有表单路径。现在,这一点很重要,在要使用现有表单的页面上,必须添加头文件:
using "your existing project name";
对不起,布莱恩·麦基,你的解决方案对我不起作用。它确实改进了它,让VS认识到它是一个表单而不是一个代码文件,也就是说,给它一个图标(想象一下它添加了表单) 但我设法完全解决这个问题的唯一方法是在文本编辑器中手动编辑csproj文件。我真的不相信这是一个很好的解决方案,而且可能相当危险,特别是考虑到我犯了两个打字错误,并且完全破坏了项目,但一旦我做对了,它就成功了。也很难发现错误,例如没有正确关闭标记或忘记文件扩展名 因此,在通过“添加-->现有项”添加文件后,项目以这些条目开始:(请注意,我确信您不必首先将文件复制到项目文件夹中,只需导航到文件存储在项目外部的位置,VS就会将其复制到您右键单击的文件夹中。提前复制当然也可以。)
形式
形式
形式
在文件的下面:
<EmbeddedResource Include="Reports\GBudget1Report.resx" />
<EmbeddedResource Include="Reports\GBudget2Report.resx" />
<EmbeddedResource Include="Reports\GBudget1Report.resx">
<DependentUpon>GBudget1Report.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\GBudget2Report.resx">
<DependentUpon>GBudget2Report.cs</DependentUpon>
</EmbeddedResource>
将这些表单与项目中正常工作的现有表单进行比较(如果没有,另一个选项是在Visual Studio中创建一个新表单,它将为您提供正确的复制标记),我发现DependentUpon标记没有将子文件与主表单代码文件相关联
所以我手工编辑以匹配:
<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>
形式
GBudget1Report.cs
形式
GBudget2Report.cs
再往下看文件:
<EmbeddedResource Include="Reports\GBudget1Report.resx" />
<EmbeddedResource Include="Reports\GBudget2Report.resx" />
<EmbeddedResource Include="Reports\GBudget1Report.resx">
<DependentUpon>GBudget1Report.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\GBudget2Report.resx">
<DependentUpon>GBudget2Report.cs</DependentUpon>
</EmbeddedResource>
GBudget1Report.cs
GBudget2Report.cs
这不是我喜欢的解决方案,但它很有效。如果有人有更好的解决方案,我很乐意倾听。如果要创建windows窗体库,最好创建windows窗体应用程序项目。然后删除默认表单(Form1),转到项目属性并将输出类型(或项目类型)从Windows窗体应用程序更改为类库
这样,输出将是一个DLL,但它将具有windows窗体项目所需的引用。正如您所指出的,在添加现有项时,不要添加相应的.Designer和.resx文件,只需添加它们的顶层/主文件。在我的例子中,我还注意到,我一次只能添加一个表单。如果您尝试同时添加多个表单,您将看到表单作为单独的项。可能是因为使用了visual studio 2012,但所有这些解决方案都不起作用。 AtConway提示编辑csproj文件。这个暗示奏效了
您所需要做的就是传递.cs文件。(代码文件)假设您想要导入一个名为YourFormName的表单。那么您应该只将YourFormName.cs添加到项目-t中