如何将现有表单添加到新项目?

时间:2012-04-25 13:24:43

标签: c# winforms visual-studio-2010

我从未能够将现有文件中的Form成功添加到新项目中。

我在博客上看到你只添加* .cs文件并且依赖项进来了。好吧,我试过这个并且文件做了dragin并关联了* .designer和* .resx文件。 但是,表单图标不显示。相反,该文件看起来像普通的* .cs文件图像。而且,当我双击该文件时,我得到了代码而不是表单对象。

是否可以添加现有表单并正确识别它们?

21 个答案:

答案 0 :(得分:29)

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

  1. 添加对System.Windows.Forms.dllSystem.Drawing
  2. 的引用
  3. 导入*.cs文件
  4. 注意:

    一个。只有在执行这些步骤后才能正确识别文件,然后尝试打开该文件。突然VS“醒来”并修复了文件。

    B中。 步骤顺序无关紧要。如果您已导入* .cs文件,只需修复引用。

    ℃。如果缺少其他参考文献,例如DevExpress或其他第三方控件导入),* .cs文件在解决之前将无法正常显示。

答案 1 :(得分:20)

对不起P.Brian.Mackey,你的解决方案对我不起作用。它确实通过让VS认识到它是一个表单而不是代码文件来改进它,即给它是Icon(想象它添加了Form)

但我唯一能够完全解决问题的方法是在文本编辑器中手动编辑csproj文件。我并不是真的相信这是一个很好的解决方案并且可能非常危险,特别是考虑到我犯了两个输入错误而且完全破坏了项目,但是一旦我做对了它就确实有效。如果没有正确关闭标签或忘记文件扩展,也很难找到错误。

所以在通过'Add - >添加文件后,项目开始使用这些条目现有项目':( Ps我确定您不必先将文件复制到项目文件夹中,只需导航到项目外部存储的位置,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" />

将这些与正确工作的项目中的现有表单进行比较(其他选项是如果你还没有,则是在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 :(得分:17)

这是不涉及关闭项目并重新开启的方法:

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

答案 3 :(得分:5)

您可以将现有表单导入项目。需要导入的文件取决于用于创建表单的Visual Studio的版本。

我假设你有两个独立的项目,Foo和Bar,在不同的解决方案中:

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

现在,假设您需要将表格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项目。选择[添加现有项目],然后在打开的对话框中选择为Foo表单复制的所有文件。确认后,您应该在解决方案资源管理器中正确查看新导入的表单。

答案 4 :(得分:3)

我在升级VisualBasic表单时遇到过类似的问题,从VisualStudio 2010到VisualStudio 2013.似乎有两种方法可以添加现有项目。

问题:如果我选择主窗口 - &gt;项目 - &gt;添加现有项目并仅拉入文件formname.vb,结果似乎只被解释为代码(没有设计者),指向原始文件(而不是复制到新项目)并有其他问题。

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

答案 5 :(得分:2)

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

复制 - 将它们粘贴到您的新项目中(只需确保新项目中没有相同名称的此类表单)

答案 6 :(得分:1)

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

using "your existing project name";

答案 7 :(得分:1)

如果要创建Windows窗体库,最好是创建Windows窗体应用程序项目。然后删除默认表单(Form1),转到项目属性并将输出类型(或项目类型)从Windows窗体应用程序更改为类库。

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

答案 8 :(得分:1)

也许是因为使用了visual studio 2012,但所有这些解决方案都没有用。 AtConway提示编辑csproj文件。那个暗示很有效。

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

答案 9 :(得分:1)

经过大量测试并且在添加时无法正确识别表单,即使.designer和.resx在导入.vb时进行了复制,我发现Vidar's solution是最好的,最不实用的修复。< / p>

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

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

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

  1. 向项目添加一个新的空白表单(这会自动添加上面的引用)
  2. 添加要导入的现有表单.vb / .cs(它现在将在解决方案资源管理器中显示表单图标,并且&#39;查看设计器&#39;将从上下文中提供)
  3. 删除空白表单或将其用于其他内容
  4. 这不需要编辑任何VS配置文件,如问题的其他答案所示。

答案 10 :(得分:1)

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

步骤进行:

在VS2013中创建WinForms项目(在我的案例中.Net Framework为4.5.1) 右键单击项目 - &gt;添加 - &gt;现有项目...... 将要导入的winform复制到项目的文件夹中。如果要将其添加到新文件夹,则首先创建一个文件夹然后添加。 使用控件搜索任何WinForm(我添加了两个在VS2010中为.NET Framework 4创建的表单) 在不到10秒的时间里,visual studio添加了所有剩余的文件,我可以在设计模式下打开它。

答案 11 :(得分:1)

在尝试了几种方法后,我发现使用现有WinForm的最简单方法是:(类似于HaraldDuch的答案)并仅在VS2013上进行测试:

1)在将现有的WinForm移动到目标项目的源文件夹之前,使用源WinForm的相同名称创建一个虚拟WinForm。

2)保存时关闭VS解决方案。

3)使用您要使用的现有WinForm文件,从Windows资源管理器(关闭VS IDE)删除/替换新创建的虚拟WinForm文件集(* .cs,* .Designer.cs和* .resx)。 / p>

4)打开VS查找现有的WinForm,如果愿意,可以从VS IDE重命名,并且需要更改旧WinForm的命名空间以匹配新项目。

答案 12 :(得分:0)

最适合我的解决方案是

  1. 关闭Visual Studio(如果打开)

  2. 将所有3个文件(.cs,.designer.cs,.resx)复制到其他所有形式也都位于的项目文件夹中。

  3. 现在使用Visual Studio打开项目。

  4. 构建项目

  5. 通过右键单击表单并选择视图设计器来打开表单,这将为表单生成适当的designer.cs。如果您不这样做,有时可能会提示您错误

  

InitializeComponent在当前上下文中不存在。

  1. 现在您可以打开并编辑.cs代码文件

此后,新表单将在解决方案资源管理器中看起来像普通表单。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

虽然这是一篇很老的帖子,但我遇到了和@MatthewRadford上面描述的完全相同的问题。我的解决方法是仅添加.CS文件(不添加.resx文件),并允许visual studio在添加.cs文件后立即自动生成.resx文件。

但是,我找到了永久性解决方案。如果您在升级到Visual Studio的新版本后立即开始遇到此问题,则可能在升级期间未正确注册Active Reports。解决方案是停用活动报告(使用GrapeCity License Manager),卸载Active Reports,从头开始重新安装Active Reports,然后重新激活许可证。您现在应该能够同时添加ReportName.cs和ReportName.resx以及Designer.cs文件,同时让visual studio正确处理它们的依赖项。

答案 15 :(得分:0)

在解决方案资源管理器中将.cs文件从文件系统拖放到项目树(例如):

  • mainForm.cs
  • mainForm.Designer.cs

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

答案 16 :(得分:0)

这对我来说很有用(我和你有同样的问题)。 1.创建具有相同名称的新winform,添加内容(创建resx文件),保存并关闭。 2.用原始表单替换新创建的文件。 3.完成

答案 17 :(得分:0)

您仍然可以使用“添加现有的iTem”

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

  2. 确保.cs文件中的“命名空间应用程序”与项目相同

  3. 现在您可以使用自动完成刚刚添加的表单。

答案 18 :(得分:0)

Visual Studio 2012中所需的全部内容如下:

  1. 将表单的三个文件复制到项目文件夹(.cs,.designer.cs和.resx)
  2. 转到项目并添加现有对象。
  3. 选择.CS文件
  4. 它将导入并看起来像标准代码文件。如上所述,双击它将无法打开设计器。但是,只需单击保存所有文件,然后关闭并重新打开项目,现在它被识别为一个表单并正常工作。

答案 19 :(得分:0)

就我而言,我也注意到我一次只能刊登一张表格。如果您尝试同时添加多个表单,则可以将表单视为单独的项目。

答案 20 :(得分:-2)

您只需传递.cs文件即可。 (代码文件)