2012-04-25 107 views
30

我从来没有能够成功地将新的Form文件作为现有文件添加到新项目中。我在博客上看到,您只添加了* .cs文件,并且依赖项进来了。嗯,我试过这个,并且文件没有拖动并关联* .designer和* .resx文件。但是,表单图标不显示。相反,该文件看起来像一个普通的* .cs文件图像。而且,当我双击文件时,我会获得代码而不是表单对象。如何将现有表单添加到新项目中?

是否可以添加现有的表单而不重新创建它们?

+1

看看实际的'csproj'文件本身。它是XML,可以手动编辑 - 查看现有表单的结构,并复制新表单的结构。 – Oded 2012-04-25 13:30:37

+0

这对我来说一直有效,从来没有任何问题,您是否可能试图添加一个表单到控制台项目?看起来很奇怪,它不起作用。 – Jason 2012-04-25 13:32:29

+1

我可以说,在VS2012中,唯一能解决问题的方法就是编辑'.csproj'文件并手动创建依赖关系(不是太难)。否则,“.Designer.cs”和“.resx”文件在解决方案资源管理器中从不出现在表单正下方。 @MatthewRadford的解决方案是唯一为我工作的人。 – atconway 2013-07-01 22:12:56

回答

22

经过一些研究,我发现问题的根源。所有必须导入的文件都是*.cs文件是正确的。警告在于项目类型。如果在类库项目中工作,则必须执行另一个步骤。

  1. 添加对System.Windows.Forms.dllSystem.Drawing的引用。
  2. 导入*.cs文件

注:

A.后,我执行了这些步骤,然后尝试打开该文件中的文件只有正确识别。突然VS“醒来”并修复文件。
B.步骤顺序无关紧要。如果您已经导入* .cs文件,只需修复引用。
C.如果缺少其他引用(E.G. DevExpress或其他第三方控制导入),* .cs文件将无法正确显示,直到解决此问题。

+2

我也必须在添加引用后关闭并重新打开我的解决方案。然后重新添加.cs文件 – Koenyn 2012-11-28 06:10:30

2

你实际上需要2个文件: - Form1.cs中 - Form1.Designer.cs

复制 - 粘贴它们到新的项目(只需确保不存在这样的形式在新的项目相同nameexisting )

+0

别忘了Form1.Designer.resx。缺失的图标看起来不太好。 ;) – Skalli 2012-04-25 13:51:26

5

您可以将现有表单导入到项目中。需要导入的文件取决于用于创建表单的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表单复制的所有文件。确认后,您应该在解决方案资源管理器中正确看到新导入的表单。

+0

在我的情况下,也有三个文件,但命名有点不同。我在VS2010 Ultimate上,文件名是:'MyForm1.cs','MyForm1.Designer.cs','MyForm1.resx'。据我所见,任何地方都没有'MyForm1.Designer.resx'。这是一个错字吗?你在什么版本的VS上? – 2012-10-16 14:56:34

+0

似乎他们在VS 2010中的.resx文件名中删除了“.Designer”部分。无论如何,这应该仍然有效。 – npclaudiu 2012-10-16 19:19:47

+0

为什么,当然是这样。对于非常清晰的文件树布局,它也是+1。我只是好奇你为**这些**文件名所用的版本。可能很高兴知道以防万一。我不是故意批评 - 如果听起来那么抱歉。 – 2012-10-17 04:14:00

1

转到解决方案资源管理器,右键单击它然后添加现有的项目,在这里选择现有的表单路径。现在,这一点很重要,在您要使用现有表单的页面上,您必须添加标题文件:

using "your existing project name"; 
+0

作为测试的一部分,我喜欢在自己的测试解决方案上创建用户控件。一旦我满意,我将用户控制文件(* .cs,* .resx,* .designer.cs)复制到目标文件夹。然后我使用NtePad ++编辑更改命名空间的designer.cs文件。例如,假设我的testProject是Tester,我的目标项目是Boo。在designer.cs文件中,我将'namespace testProject'更改为'namespace Boo'。 – 2013-10-31 14:51:56

17

对不起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> 

这不是我喜欢一个解决方案,但它的工作原理。如果有人有更好的解决方案,我很乐意倾听。

+2

这是我发现在VS2012中工作的唯一解决方案,用于在将项目复制并添加到项目中之后将现有表单添加到新项目中。 – atconway 2013-07-01 22:14:42

+0

是的,这是一个很好的观点,我使用VS2012。 – 2014-11-14 11:56:47

+0

这适用于VS2013中的我 – demonplus 2015-08-31 18:28:56

1

如果你想创建窗口的形成是更好,如果你创建一个Windows窗体应用程序项目库。然后删除默认窗体(Form1),转到项目属性并将输出类型(或项目类型)从Windows窗体应用程序更改为类库。

这样的输出将是一个DLL,但它会让你需要一个Windows窗体项目的引用。正如您所指出的那样,添加现有项目时不要添加其对应的.Designer和.resx文件,只需添加其顶级/主文件即可。

0

在我的情况,我也注意到,我可以在同一时间只有一个广告形式。如果您尝试同时添加多个表单,您将会看到表单为单独项目。

1

也许是因为使用的Visual Studio 2012的,但所有这些解决方案没有奏效。 Atollway给出了编辑csproj文件的提示。那暗示奏效了。

  1. 打开您想要添加三个文件的项目的解决方案。
  2. 假设您想要添加MyForm.cs/MyForm.Designer.cs和MyForm.resX。确保它们位于项目的文件夹中
  3. 用虚拟名称添加一个虚拟表单(或usercontrol):MyTempForm。
  4. 保存解决方案和开发工作室
  5. 关闭它在Windows资源管理器中删除MyTempForm三个MyTempForm文件
  6. 重命名你的三个MyForm的文件,使用相同的扩展。
  7. Developer Studio里再次打开您的解决方案2012
  8. 看到你的MyForm的现在完全可以作为MyTempForm
  9. 在Solution Explorer中重命名MyTempForm回MyForm的
-2

所有你必须是传递.cs文件。 (代码文件)

1

假设您要导入名为YourFormName的窗体。然后,您应该只添加YourFormName.cs到项目 - 其余部分(YourFormName.designer.cs和YourFormName.resx)将自动添加。

步骤:

创建WinForms项目在VS2013 (在我的情况.NET框架是4.5.1)项目上右击 - >添加 - >现有项... 副本的winform要导入到您项目的文件夹。如果您想将其添加到新文件夹,请先创建一个文件夹然后添加。 搜索任何带有控件的WinForm(我添加了两个在VS2010中为.NET框架4创建的窗体) 小于10秒Visual Studio添加了所有剩余的文件,我可以在设计模式下打开它。

0

所有这一切需要在Visual Studio 2012是以下内容:形式进入项目文件夹(的.cs,和了.Designer.cs的.resx)

  • 转到

    1. 复制三个文件该项目并添加一个现有的对象。
    2. 选择.CS文件
    3. 它将导入并看起来像一个标准的代码文件。双击它不会打开上面提到的设计器。然而,只需点击保存所有文件,然后关闭并重新打开该项目,现在它被识别为一个窗体并且正常工作。
  • +0

    您的答案不包含任何其他答案中至少没有提供的信息。 – 2014-05-13 17:26:19

    3

    从升级到VisualStudio 2013的VisualBasic窗体升级VisualBasic窗体时,我刚遇到类似的问题。似乎有两种添加现有项目的方法。

    问题:如果我选择主窗口 - >项目 - >添加现有项目,并只提取文件formname.vb,结果似乎被解释为代码(没有设计者),指向原始文件(宁比复制新项目)还有其他问题。

    解决方案:如果改为进入解决方案资源管理器窗口,请单击以选择项目(而不是树中较低级别的对象),然后在窗口中单击右键,出现的菜单提供Add-> Existing项目。使用此版本按预期工作,只需要我找到formname.vb文件。没有手动复制文件,没有指向多张文件,没有编辑脚本,等我猜这同样适用于C语言编写的

    0

    形式仍然可以使用“添加现有项目”

    1. “添加现有的iTem”,选择三个文件(.cs .resx.Designer。CS)

    2. 使你的cs文件确认“命名空间应用”是一样的项目

    3. 现在你可以使用自动完成你刚才添加的形式。

    1

    尝试多种方法对我来说,使用现有的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的命名空间以匹配你的新项目。

    +0

    这在VS2015中适用于我。必须在Designer中进行一些编辑才能更改项目名称。 – Tim 2017-04-20 17:55:56

    8

    我知道这是一个老问题,但我想给出我的答案,不涉及关闭项目并重新打开它。

    1. 添加3个现有表单文件(cs,Designer.cs和resx)。
    2. 现在,排除刚刚从项目中添加的3个文件。
    3. 打开添加现有项目资源管理器窗口并转到您的项目目录。
    4. 选择cs文件并添加。
    5. 田田。所有不错
    +0

    这项工作完美 – 2017-08-23 22:46:52

    +0

    辉煌。这是最简单的方法。 – 2018-03-05 20:21:04

    0

    这对我来说刚刚工作(我和你有同样的问题)。 1.创建具有相同名称的新winform,添加一些东西(所以resx文件被创建),保存并关闭。 2.用原始表单替换新创建的文件。 3.完成

    0

    拖放从文件系统下降的.cs文件在解决方案资源管理项目树(例如):

    • mainForm.cs
    • mainForm.Designer.cs

    如果它不是Windows Forms项目,请不要忘记引用。

    0

    尽管这是一个旧帖子,但我的确遇到了与上面描述的@MatthewRadford相同的问题。我的解决方法是只添加.CS文件(不要添加.resx文件),并允许Visual Studio在添加.cs文件后自动生成.resx文件。我发现永久性解决方案。如果升级到新版Visual Studio后立即出现此问题,升级过程中可能无法正确注册Active Reports。解决方案是停用Active Reports(使用GrapeCity License Manager),卸载活动报告,从头开始重新安装活动报告,然后重新激活许可证。您现在应该可以同时添加ReportName.cs和ReportName.resx以及Designer.cs文件,同时让Visual Studio正确处理它们的依赖关系。

    0

    只需添加表单文件(form.vb或form.cs)即可自动创建其他文件。

    0

    经过大量测试,添加后未能正确识别窗体,即使.designer和.resx在导入.vb时复制,我发现Vidar's solution是最好的,最不起作用的修复程序。

    看来如果这些引用还没有在项目中(如果还没有表单),表单不会被识别为表单,而是作为代码模块导入。

    • System.Drawing中
    • System.Windows.Forms的

    这些可以手动上面添加每他们的解决方案,也可以简单地

    1. 添加一个新的空白表格该项目(这将自动添加上述参考)
    2. 添加现有表单.vb/.cs您要导入(它现在将显示在Solu中的表单图标重刑Explorer和“视图设计器”将可从上下文中)
    3. 删除空白表单或将其用于其他东西

    这不需要编辑任何VS的配置文件,如图所示在其他的答案的题。

    相关问题