繁体   English   中英

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

[英]How do you add an existing form to a new project?

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

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

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

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

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

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

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

笔记:

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

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

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

抱歉 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>

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

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

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

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

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

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

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

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

using "your existing project name";

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

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

也许是因为使用了 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

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

脚步:

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

在尝试了几种方法后,我发现使用现有 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 的命名空间以匹配您的新项目。

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

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

  • 系统绘图
  • System.Windows.Forms

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

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

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

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

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

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

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

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

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

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

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

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

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

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

尽管这是一篇旧帖子,但我遇到了与@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 正确处理它们的依赖关系。

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

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

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

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

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

  4. 构建项目

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

当前上下文中不存在 InitializeComponent。

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

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

我尝试了几乎所有提出的解决方案,但没有一个真正适合我。 我终于自己编辑了 csproj 文件。 在我将另一个项目中的表单添加到我的新项目中后,我打开了 csproj 文件,我注意到 Visual Studio 添加的引用缺少部分。 因此,我根据以下模板编辑了节点。

<Compile Include="NewForm.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="NewForm.Designer.cs">
  <DependentUpon>NewForm.cs</DependentUpon>
</Compile>

然后我重新启动了 Visual Studio,一切都很顺利。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM