如何将现有表单添加到新项目中?
我从来没有能够成功地将新的Form
文件作为现有文件添加到新项目中。我在博客上看到,您只添加了* .cs文件,并且依赖项进来了。嗯,我试过这个,并且文件没有拖动并关联* .designer和* .resx文件。但是,表单图标不显示。相反,该文件看起来像一个普通的* .cs文件图像。而且,当我双击文件时,我会获得代码而不是表单对象。如何将现有表单添加到新项目中?
是否可以添加现有的表单而不重新创建它们?
经过一些研究,我发现问题的根源。所有必须导入的文件都是*.cs
文件是正确的。警告在于项目类型。如果在类库项目中工作,则必须执行另一个步骤。
- 添加对
System.Windows.Forms.dll
和System.Drawing
的引用。 - 导入
*.cs
文件
注:
A.后,我执行了这些步骤,然后尝试打开该文件中的文件只有正确识别。突然VS“醒来”并修复文件。
B.步骤顺序无关紧要。如果您已经导入* .cs文件,只需修复引用。
C.如果缺少其他引用(E.G. DevExpress或其他第三方控制导入),* .cs文件将无法正确显示,直到解决此问题。
我也必须在添加引用后关闭并重新打开我的解决方案。然后重新添加.cs文件 – Koenyn 2012-11-28 06:10:30
你实际上需要2个文件: - Form1.cs中 - Form1.Designer.cs
复制 - 粘贴它们到新的项目(只需确保不存在这样的形式在新的项目相同nameexisting )
别忘了Form1.Designer.resx。缺失的图标看起来不太好。 ;) – Skalli 2012-04-25 13:51:26
您可以将现有表单导入到项目中。需要导入的文件取决于用于创建表单的Visual Studio版本。
我会假设你有两个单独的项目,Foo和酒吧,在不同的解决方案:
C:\
Projects\
Foo\
Foo.sln
Foo.vcproj
Program.cs
Foo.cs
Foo.Designer.cs
Foo.Designer.resx
和
C:\
Projects\
Bar\
Bar.sln
Bar.vcproj
Program.cs
Bar.cs
Bar.Designer.cs
Bar.Designer.resx
现在,说你需要导入FHE形式富到项目栏。首先,你需要伴随美孚的所有文件复制到该酒吧项目文件夹:
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
然后,打开Bar.sln在Visual Studio和Solution Explorer中的栏右击项目。选择[添加现有项目]并选择在打开的对话框中为Foo表单复制的所有文件。确认后,您应该在解决方案资源管理器中正确看到新导入的表单。
在我的情况下,也有三个文件,但命名有点不同。我在VS2010 Ultimate上,文件名是:'MyForm1.cs','MyForm1.Designer.cs','MyForm1.resx'。据我所见,任何地方都没有'MyForm1.Designer.resx'。这是一个错字吗?你在什么版本的VS上? – 2012-10-16 14:56:34
似乎他们在VS 2010中的.resx文件名中删除了“.Designer”部分。无论如何,这应该仍然有效。 – npclaudiu 2012-10-16 19:19:47
为什么,当然是这样。对于非常清晰的文件树布局,它也是+1。我只是好奇你为**这些**文件名所用的版本。可能很高兴知道以防万一。我不是故意批评 - 如果听起来那么抱歉。 – 2012-10-17 04:14:00
转到解决方案资源管理器,右键单击它然后添加现有的项目,在这里选择现有的表单路径。现在,这一点很重要,在您要使用现有表单的页面上,您必须添加标题文件:
using "your existing project name";
作为测试的一部分,我喜欢在自己的测试解决方案上创建用户控件。一旦我满意,我将用户控制文件(* .cs,* .resx,* .designer.cs)复制到目标文件夹。然后我使用NtePad ++编辑更改命名空间的designer.cs文件。例如,假设我的testProject是Tester,我的目标项目是Boo。在designer.cs文件中,我将'namespace testProject'更改为'namespace Boo'。 – 2013-10-31 14:51:56
对不起P.Brian。麦基,你的解决方案并不适合我。它确实通过让VS认识到它是一种形式而不是代码文件来改善它,即赋予它是图标(想象它添加了表单)
但是唯一的办法就是编辑csproj在文本编辑器中手动文件。我并不确信这是一个很好的解决方案,而且可能相当危险,尤其是考虑到我犯了两次打字错误,并且彻底破坏了这个项目,但是一旦我找到了正确的方案,它就会发挥作用。也很难找到错误,比如没有正确关闭标签或忘记扩展文件。
因此该项目开始了与这些项目通过“添加 - >现有项”添加文件后:(附言:我敢肯定你没有将文件先复制到项目文件夹,只需导航到在那里它们被存储在项目外和VS将它们复制到您右击该文件夹中提前当然复制的工作原理也是如此)
<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>
,并在文件中进一步下跌:。
<EmbeddedResource Include="Reports\GBudget1Report.resx" />
<EmbeddedResource Include="Reports\GBudget2Report.resx" />
将这些与工作中的现有表格进行比较rectly(另一种选择是,如果你没有一个,就是建立在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>
再进一步下跌的文件:
<EmbeddedResource Include="Reports\GBudget1Report.resx">
<DependentUpon>GBudget1Report.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\GBudget2Report.resx">
<DependentUpon>GBudget2Report.cs</DependentUpon>
</EmbeddedResource>
这不是我喜欢一个解决方案,但它的工作原理。如果有人有更好的解决方案,我很乐意倾听。
如果你想创建窗口的形成是更好,如果你创建一个Windows窗体应用程序项目库。然后删除默认窗体(Form1),转到项目属性并将输出类型(或项目类型)从Windows窗体应用程序更改为类库。
这样的输出将是一个DLL,但它会让你需要一个Windows窗体项目的引用。正如您所指出的那样,添加现有项目时不要添加其对应的.Designer和.resx文件,只需添加其*/主文件即可。
在我的情况,我也注意到,我可以在同一时间只有一个广告形式。如果您尝试同时添加多个表单,您将会看到表单为单独项目。
也许是因为使用的Visual Studio 2012的,但所有这些解决方案没有奏效。 Atollway给出了编辑csproj文件的提示。那暗示奏效了。
- 打开您想要添加三个文件的项目的解决方案。
- 假设您想要添加MyForm.cs/MyForm.Designer.cs和MyForm.resX。确保它们位于项目的文件夹中
- 用虚拟名称添加一个虚拟表单(或usercontrol):MyTempForm。
- 保存解决方案和开发工作室
- 关闭它在Windows资源管理器中删除MyTempForm三个MyTempForm文件
- 重命名你的三个MyForm的文件,使用相同的扩展。
- Developer Studio里再次打开您的解决方案2012
- 看到你的MyForm的现在完全可以作为MyTempForm
- 在Solution Explorer中重命名MyTempForm回MyForm的
所有你必须是传递.cs文件。 (代码文件)
假设您要导入名为YourFormName的窗体。然后,您应该只添加YourFormName.cs到项目 - 其余部分(YourFormName.designer.cs和YourFormName.resx)将自动添加。
步骤:
创建WinForms项目在VS2013 (在我的情况.NET框架是4.5.1)项目上右击 - >添加 - >现有项... 副本的winform要导入到您项目的文件夹。如果您想将其添加到新文件夹,请先创建一个文件夹然后添加。 搜索任何带有控件的WinForm(我添加了两个在VS2010中为.NET框架4创建的窗体) 小于10秒Visual Studio添加了所有剩余的文件,我可以在设计模式下打开它。
所有这一切需要在Visual Studio 2012是以下内容:形式进入项目文件夹(的.cs,和了.Designer.cs的.resx)
- 复制三个文件该项目并添加一个现有的对象。
- 选择.CS文件
- 它将导入并看起来像一个标准的代码文件。双击它不会打开上面提到的设计器。然而,只需点击保存所有文件,然后关闭并重新打开该项目,现在它被识别为一个窗体并且正常工作。
您的答案不包含任何其他答案中至少没有提供的信息。 – 2014-05-13 17:26:19
从升级到VisualStudio 2013的VisualBasic窗体升级VisualBasic窗体时,我刚遇到类似的问题。似乎有两种添加现有项目的方法。
问题:如果我选择主窗口 - >项目 - >添加现有项目,并只提取文件formname.vb,结果似乎被解释为代码(没有设计者),指向原始文件(宁比复制新项目)还有其他问题。
解决方案:如果改为进入解决方案资源管理器窗口,请单击以选择项目(而不是树中较低级别的对象),然后在窗口中单击右键,出现的菜单提供Add-> Existing项目。使用此版本按预期工作,只需要我找到formname.vb文件。没有手动复制文件,没有指向多张文件,没有编辑脚本,等我猜这同样适用于C语言编写的
形式仍然可以使用“添加现有项目”
“添加现有的iTem”,选择三个文件(.cs .resx.Designer。CS)
使你的cs文件确认“命名空间应用”是一样的项目
现在你可以使用自动完成你刚才添加的形式。
尝试多种方法对我来说,使用现有的WinForm的最简单的方法后,发现是:(类似于HaraldDuch的答案),只有在VS2013测试:
1)现有的WinForm移动到前目标项目的源文件夹中,使用源WinForm的相同名称创建一个虚拟WinForm。
2)保存时关闭VS解决方案。
3)从Windows资源管理器(关闭VS IDE)中删除/替换新创建的WinForm文件(* .cs,* .Designer.cs和* .resx)假集合与您要使用的现有WinForm文件。
4)打开VS找到你现有的WinForm,你可以从VS IDE重新命名它,如果你愿意,你需要改变旧的WinForm的命名空间以匹配你的新项目。
这在VS2015中适用于我。必须在Designer中进行一些编辑才能更改项目名称。 – Tim 2017-04-20 17:55:56
我知道这是一个老问题,但我想给出我的答案,不涉及关闭项目并重新打开它。
- 添加3个现有表单文件(cs,Designer.cs和resx)。
- 现在,排除刚刚从项目中添加的3个文件。
- 打开添加现有项目资源管理器窗口并转到您的项目目录。
- 选择cs文件并添加。
- 田田。所有不错
这项工作完美 – 2017-08-23 22:46:52
辉煌。这是最简单的方法。 – 2018-03-05 20:21:04
这对我来说刚刚工作(我和你有同样的问题)。 1.创建具有相同名称的新winform,添加一些东西(所以resx文件被创建),保存并关闭。 2.用原始表单替换新创建的文件。 3.完成
拖放从文件系统下降的.cs文件在解决方案资源管理项目树(例如):
- mainForm.cs
- mainForm.Designer.cs
如果它不是Windows Forms项目,请不要忘记引用。
尽管这是一个旧帖子,但我的确遇到了与上面描述的@MatthewRadford相同的问题。我的解决方法是只添加.CS文件(不要添加.resx文件),并允许Visual Studio在添加.cs文件后自动生成.resx文件。我发现永久性解决方案。如果升级到新版Visual Studio后立即出现此问题,升级过程中可能无法正确注册Active Reports。解决方案是停用Active Reports(使用GrapeCity License Manager),卸载活动报告,从头开始重新安装活动报告,然后重新激活许可证。您现在应该可以同时添加ReportName.cs和ReportName.resx以及Designer.cs文件,同时让Visual Studio正确处理它们的依赖关系。
只需添加表单文件(form.vb或form.cs)即可自动创建其他文件。
经过大量测试,添加后未能正确识别窗体,即使.designer和.resx在导入.vb时复制,我发现Vidar's solution是最好的,最不起作用的修复程序。
看来如果这些引用还没有在项目中(如果还没有表单),表单不会被识别为表单,而是作为代码模块导入。
- System.Drawing中
- System.Windows.Forms的
这些可以手动上面添加每他们的解决方案,也可以简单地
- 添加一个新的空白表格该项目(这将自动添加上述参考)
- 添加现有表单.vb/.cs您要导入(它现在将显示在Solu中的表单图标重刑Explorer和“视图设计器”将可从上下文中)
- 删除空白表单或将其用于其他东西
这不需要编辑任何VS的配置文件,如图所示在其他的答案的题。
看看实际的'csproj'文件本身。它是XML,可以手动编辑 - 查看现有表单的结构,并复制新表单的结构。 – Oded 2012-04-25 13:30:37
这对我来说一直有效,从来没有任何问题,您是否可能试图添加一个表单到控制台项目?看起来很奇怪,它不起作用。 – Jason 2012-04-25 13:32:29
我可以说,在VS2012中,唯一能解决问题的方法就是编辑'.csproj'文件并手动创建依赖关系(不是太难)。否则,“.Designer.cs”和“.resx”文件在解决方案资源管理器中从不出现在表单正下方。 @MatthewRadford的解决方案是唯一为我工作的人。 – atconway 2013-07-01 22:12:56