48

我从来没有能够成功地将Form现有文件中的一个添加到一个新项目中。

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

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

4

21 回答 21

37

这是一种不涉及关闭项目并重新打开它的方法:

  1. 添加 3 个现有的表单文件(cs、Designer.cs 和 resx)。
  2. 现在,排除您刚刚从项目中添加的 3 个文件。
  3. 打开 Add existing item explorer 窗口并转到您的项目目录。
  4. 选择cs文件并添加。
  5. 多田。都好
于 2015-08-21T18:59:56.423 回答
35

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

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

笔记:

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

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

C. 如果缺少其他引用,例如 DevExpress 或其他 3rd 方控件导入),*.cs 文件将无法正确显示,直到此问题得到解决。

于 2012-04-25T13:58:39.610 回答
25

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

但我设法完全解决问题的唯一方法是在文本编辑器中手动编辑 csproj 文件。我不太相信这是一个很好的解决方案并且可能非常危险,特别是考虑到我犯了两个打字错误并完全破坏了项目,但一旦我做对了它就可以工作。也很难找到诸如未正确关闭标签或忘记文件扩展名之类的错误。

因此,在通过“添加->现有项目”添加文件后,该项目从这些条目开始:(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>

这不是我喜欢的解决方案,但它有效。如果有人有更好的解决方案,我很乐意倾听。

于 2013-01-24T15:24:29.087 回答
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 导入到项目 Bar 中。首先,您需要将 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 表单复制的所有文件。确认后,您应该可以在解决方案资源管理器中正确看到新导入的表单。

于 2012-04-25T13:48:21.923 回答
3

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

问题:如果我选择 Main Window->Project->Add Existing Item 并仅拉入文件 formname.vb,结果似乎被解释为仅代码(无设计器),指向原始文件(而不是复制到新项目)并有其他问题。

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

于 2014-05-27T20:07:53.953 回答
2

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

复制 - 将它们粘贴到您的新项目中(只需确保新项目中不存在同名的此类表单)

于 2012-04-25T13:36:38.300 回答
1

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

using "your existing project name";
于 2012-08-24T15:07:11.247 回答
1

如果您想创建一个 Windows 窗体库,最好创建一个 Windows 窗体应用程序项目。然后删除默认窗体(Form1),进入项目属性,将输出类型(或项目类型)从 Windows 窗体应用程序更改为类库。

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

于 2013-01-27T17:38:10.250 回答
1

也许是因为使用了 Visual Studio 2012,但所有这些解决方案都不起作用。AtConway 提示编辑 csproj 文件。这个提示奏效了。

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

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

脚步:

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

于 2014-05-11T19:30:55.223 回答
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 的命名空间以匹配您的新项目。

于 2015-02-24T13:12:23.143 回答
1

在进行了大量测试并且在添加时未能正确识别表单后,即使在导入 .vb 时 .designer 和 .resx 正在复制,我发现Vidar 的解决方案是最好的,最少的 hacky 修复。

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

  • 系统绘图
  • System.Windows.Forms

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

  1. 向项目添加一个新的空白表单(这会自动添加上面的引用)
  2. 添加要导入的现有表单 .vb/.cs(它现在将在解决方案资源管理器中显示表单图标,并且可以从上下文中使用“视图设计器”)
  3. 删除空白表格或将其用于其他用途

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

于 2016-11-17T01:32:40.017 回答
0

就我而言,我还注意到我一次只能广告一种形式。如果您尝试同时添加多个表单,您将看到这些表单是单独的项目。

于 2013-11-07T05:22:26.323 回答
0

Visual Studio 2012 中所需的一切如下:

  1. 将表单的三个文件复制到项目文件夹中(.cs、.designer.cs 和 .resx)
  2. 转到项目并添加现有对象。
  3. 选择 .CS 文件
  4. 它将导入并看起来像一个标准代码文件。如上所述,双击它不会打开设计器。但是,只需单击保存所有文件,然后关闭并重新打开项目,现在它被识别为表单并且可以正常工作。
于 2014-05-13T17:03:57.280 回答
0

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

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

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

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

于 2014-08-13T02:45:13.383 回答
0

这刚刚对我有用(我和你有同样的问题)。1.创建新的同名winform,添加一些东西(因此创建resx文件),保存并关闭。2. 用您原来的表格替换新创建的文件。3. 完成

于 2015-09-03T09:04:46.713 回答
0

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

  • 主窗体.cs
  • mainForm.Designer.cs

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

于 2015-11-20T07:16:01.823 回答
0

尽管这是一篇旧帖子,但我遇到了与@MatthewRadford 上面描述的完全相同的问题。我的解决方法是只添加 .CS 文件(不要添加 .resx 文件),并允许 Visual Studio 在添加 .cs 文件后立即自动生成 .resx 文件。

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

于 2015-12-18T20:59:25.190 回答
0

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

于 2016-03-24T09:21:15.390 回答
0

对我有用的最简单的解决方案是,

  1. 如果它打开,请关闭视觉工作室

  2. 将所有 3 个文件(.cs、.designer.cs、.resx)复制到所有其他表单所在的项目文件夹中。

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

  4. 构建项目

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

当前上下文中不存在 InitializeComponent。

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

之后,新表单将在解决方案资源管理器中显示为正常表单。

于 2019-02-15T12:49:40.197 回答
-2

您所要做的就是传递 .cs 文件。(代码文件)

于 2014-02-13T01:29:12.317 回答