【问题标题】:Copying winforms between projects in Visual Studio在 Visual Studio 中的项目之间复制 winform
【发布时间】:2010-10-26 04:51:16
【问题描述】:

在 Visual Studio 的解决方案中,将表单从一个项目复制或剪切/粘贴到另一个项目的最佳方法是什么?

每当我尝试使用解决方案资源管理器(拖放或右键单击剪切和粘贴)时,它只会复制底层 C# 代码,而不是帮助您通过表单设计器可视化表单的必要“点点滴滴” .

【问题讨论】:

  • 您缺少哪些“点点滴滴”?是复制 Designer.cs 和 .resx 文件,还是仅复制 YourForm.cs 文件?
  • 有点重复 - 如果我将我的解决方案放在“Gold's”问题下然后删除这个问题会更好吗???

标签: c# visual-studio winforms


【解决方案1】:
  1. .cs.designerresx这三个文件复制到目标解决方案文件夹中。
  2. 在目标工程中,选择Add existing item,先添加设计器文件。
  3. 修改命名空间属性。 .cs 文件也应该进来。
  4. 修改.cs文件中的命名空间。
  5. 使用Add existing item 添加resx 文件。

【讨论】:

  • 谢谢,工作正常。我是先添加 Form1.cs 文件
  • 在VS2013中更简单,只需将.cs、.designer和.resx表单文件复制到目标解决方案文件夹即可。使用上面的“添加现有项目”,但添加 .cs 文件。而已!引入 AND 命名空间的所有 3 个文件都会自动更改!
  • 同意 - 这很有效而且很简单。希望他能编辑他的答案 - 也希望这是最佳答案/接受。
  • 我会提一下 - 首先添加 .cs 时,我的命名空间仍然没有在 .cs 或 .designer 上更新。但足够接近。
  • @JoeGayetty 这在 Visual Studio 2017 中仍然有效。简单地说:您当然必须更新引用、属性等。
【解决方案2】:

要将表单从一个 VS2013 项目复制到另一个,最简单的(最少的鼠标点击)是:

  1. 在您的目标项目中,右键单击您的父文件夹(可能是您的项目)并在菜单中选择“添加;现有项目”。

  2. 然后在源项目中选择表单的cs文件。例如选择 Form.cs(不是 Form.Designer.cs 或 Form.resx)。

  3. 在您的目标项目中打开 Form.cs 并更改命名空间(所有实例)。

  4. 关闭并重新打开Form.cs,您将看到所有控件等。

【讨论】:

    【解决方案3】:

    想通了 - 知道这很愚蠢。

    显然目标项目应该有引用:

    • System.Windows.Forms
    • System.Drawing

    在您进行任何复制或粘贴之前首先包含在项目中,否则您将遇到我描述的问题。

    感谢任何试图帮助 BTW 的人。

    【讨论】:

      【解决方案4】:

      现在在 2012 年变得更容易了。只需转到文件 > 添加 > 现有项目 > 将表单拖放到您要添加到的项目中。

      【讨论】:

        【解决方案5】:

        我在 Visual Studio 2012 中尝试了以下过程并且成功了。

        1. 通过右键单击解决方案 > 添加 > 现有项目菜单,将要从中导入表单的项目添加到解决方案中。选择项目并单击“确定”。
        2. 现在右键单击要复制的表格,选择复制。
        3. 右键单击要复制的项目并选择粘贴。
        4. 表单将被复制到您的项目中,现在重命名命名空间。
        5. 从解决方案中删除您在第 1 步中添加的项目。

        【讨论】:

          【解决方案6】:

          确保您不仅复制了 Form.cs,还复制了 Form.designer.cs 和 Form.resx 文件。

          但我需要问一下,您为什么要在同一个解决方案的多个项目中维护同一个表单的副本。听起来好像您可能想概括其中的代码,将其放入类库并在适用的地方重新使用它。

          【讨论】:

          • 不,我只是在错误的项目中设计了一个表单,现在我想将它移动到正确的项目中。
          • 我还添加了 Designer.cs 和 resx 文件 - 仍然没有改变任何东西。
          • 好的;我只是想举起旗帜,因为您使用了“复制”一词而不是“移动”:o)
          • 我刚刚尝试过(在 VS 2008 中)。如果我在按住 键的同时拖动 Form.cs 文件,它会将表单及其关联文件移动到另一个项目,并且表现得像该项目中的表单。
          【解决方案7】:

          使用ReSharper(获取演示),在代码视图中右键单击类,重构->移动,然后将其移动到另一个项目。

          额外的好处是,如果您通过在项目之间移动命名空间来更改命名空间,它将自动更新所有引用。

          【讨论】:

          • 它实际上对复制表单有很好的支持——目前正在使用 ReSharper——并且非常喜欢它。
          【解决方案8】:

          如果你想在同一台机器上成型,那么你可以这样做。

          在解决方案资源管理器中项目 --> 添加 --> 添加现有项目

          从源目录中仅选择 .cs (Sample.cs) 文件并刷新当前的解决方案资源管理器它将工作。

          【讨论】:

          • 文件打开对话框还允许您将文件添加为链接。 OK/Cancel 按钮旁边有一个下拉菜单。
          【解决方案9】:

          我终于想通了:

          1) 复制 3 个您想要的格式的文件,其文件扩展名为 .cs.resx.Designer.cs
          2)添加现有并选择formName.cs
          3) 检查添加的表单的命名空间和名称属性值。
          4) 在Program.cs 文件中,使用using NameSpace; 并替换Application.Run() 行中的new NameSpace.formName()

          【讨论】:

            【解决方案10】:

            对于 Visual Studio V.12,这是唯一对我有用的方法(它是上述条目的混合):

            • 通过文件资源管理器复制组成表单的三个文件。
            • 在 Visual Studio 解决方案资源管理器的顶部栏中,打开“显示所有文件”。
            • file.cs 文件显示为灰色。单击右键并选择:“包含在项目中”。解决方案资源管理器会自动链接三个文件(.cs 文件下的 .designer 和 .resx)。 file.cs 将图标从 c++ 更改为表单图标。

            【讨论】:

              【解决方案11】:

              我使用的是 Visual Studio 2010,以下是我执行的步骤:

              1. 将所有 3 个文件(.cs、.resx、.Designer.cs)复制到目标项目文件夹中。
              2. 在 Visual Studio 中,右键单击 Project -> Add -> Existing Item...
              3. 选择所有 3 个文件(.cs、.resx、.Designer.cs),点击添加
              4. 更改 2 个文件(.cs、.Designer.cs)上的命名空间(如果目标项目上的命名空间不同)。
              5. 运行项目。
              6. 完成!

              【讨论】:

                【解决方案12】:

                您是选择文件,还是使用设计器“复制”所有控件?在解决方案资源管理器中选择YourForm.cs 文件并通过复制粘贴或拖放将其复制到您的其他项目中应该可以满足您的需要。

                【讨论】:

                • 根据您的问题在上面编辑。
                【解决方案13】:

                ** 这个对我有用:

                1) 将源文件(.cs 或 vb、.designer、.resx)复制到目标文件夹中

                2) 在目标解决方案中显示隐藏文件

                3) 选择这些文件并将它们包含到项目中。

                这将干净地添加winform或任何其他部分分割的文件。

                【讨论】:

                  【解决方案14】:

                  使用 VS2013 刚刚对此进行了测试,它看起来可靠且一致。这与上面的一些 cmets 类似,但增加了另一种更快的方法。

                  (1st) 在 Windows 文件资源管理器中突出显示并复制所有 3 个表单文件(.vb 或 .cs、.designer、.resx)

                  (2nd) 这可以通过两种方式完成:

                  (2a-1) 在文件资源管理器中,将 3 个文件与其他表单一起粘贴到项目文件夹中

                  (2a-2) 在 VS 解决方案资源管理器中,打开“显示所有文件”,右键单击粘贴的表单并选择“包含在项目中”。它应该可以在没有其他更改的情况下工作。

                  或者,我认为更好:

                  (2b-1) 在 VS 中,单击解决方案资源管理器并使用 Control-C 粘贴。 (由于某种原因,解决方案资源管理器中的右键单击上下文菜单可能不会显示粘贴选项,但它可以通过键盘工作。)此方法直接将表单添加到项目中,而不必像上面那样“包含在项目中”。使用此方法,您可以在一个步骤中一次添加任意数量的表单(每个表单都添加 3 个文件)。

                  【讨论】:

                  • 对我不起作用,我认为您仍然需要重命名课程
                  【解决方案15】:

                  我已经尝试了以下步骤并且效果很好。

                  1. 将所有 3 个文件和图标文件(如果有)复制到目标项目。
                  2. 现在转到您的项目解决方案资源管理器,然后单击 sol.explorer 顶部的显示所有文件图标
                  3. 现在您可以在项目中看到新添加的文件。

                  【讨论】:

                    【解决方案16】:

                    如果您使用的是 VS 2015,那么您只需添加“.vb”文件并使用新项目名称更改名称空间。

                    例如:如果您想将使用 VS2008 创建的“Form1”添加到使用 VS2015 创建的新项目中。

                    1. 将所有“.vb”文件、“.resx”文件、“.disigner.vb”文件复制到新的项目文件夹中。
                    2. 然后使用新的项目名称更改“.dissigner.vb”文件的命名空间。

                    这两个步骤对我有用。

                    【讨论】:

                      【解决方案17】:

                      在 Visual Studio 2015 中,单击解决方案资源管理器并右键单击鼠标 Add->Existing Item 并从另一个项目中选择要添加的表单,例如 Form.cs 并自动添加 Form.designer.cs ,将添加 Form.resx

                      【讨论】:

                        【解决方案18】:

                        如果您需要在不同的项目中使用相同的表单,解决方案是: 创建一个“类库项目”,在这个项目中添加您需要共享的表单,然后只需将对 dll 的引用添加到您的主项目中,您就可以轻松地引用表单。它的作品非常适合我

                        【讨论】:

                          【解决方案19】:

                          我发现这样做的“最简单”的方法是:

                          1. 在您的新项目中创建一个同名的表单
                          2. 向新表单添加按钮或其他控件(这将创建 .resx 文件)
                          3. 保存并关闭您的新项目
                          4. 从旧项目复制 MyForm.cs、MyForm.designer.cs、MyForm.resx 文件以覆盖新项目
                          5. 在 VS 中打开新项目之前,使用文本编辑器编辑 MyForm.cs 和 MyForm.designer.cs 中的命名空间以匹配您的新项目命名空间
                          6. 此时,您可以在 VS 中打开新项目,一切正常

                          我在尝试复制文件和“添加现有项目”时从来没有运气,因为层次结构似乎没有重建。也许像另一个用户建议的那样首先添加 .designer.cs ?无论如何,如果您尝试这种方式,您可以手动编辑新项目 .csproj 文件以包含来自原始项目的层次结构条目,如下所示:

                          <Compile Include="MyForm.Designer.cs">
                            <DependentUpon>MyForm.cs</DependentUpon>
                          </Compile>
                          

                          值得注意的是,在两个不同项目的表单之间复制控件 非常容易。只需在源项目中选择并Ctrl+C,然后在新项目中选择窗体并Ctrl+V。

                          【讨论】:

                            【解决方案20】:

                            这些“自动”选项在 VS2019 中都不适合我。表单设计器将始终为空白,并且粘贴的文件未在解决方案资源管理器中正确组合。我在 VS2019 中的做法是以下 3 个步骤:

                            1. 使用 Windows 资源管理器将表单文件复制到新的项目目录。例如这 3 个文件:
                            • StartForm.cs
                            • StartForm.Designer.cs
                            • StartForm.resx
                            1. 如果您的命名空间不同,请在记事本中打开两个 .cs 文件并将命名空间更改为新的命名空间。 (使用 ctrl+F 确保不会遗漏任何引用)我不必这样做,因为我的命名空间在我的新项目中是相同的。

                            2. 在记事本中编辑这两个 csproj 文件,并将这些文件的引用从一个 csproj 文件复制到新的 csproj 文件。例如,这是我必须复制的:

                            <ItemGroup>
                            ...
                            <Compile Include="StartForm.cs">
                              <SubType>Form</SubType>
                            </Compile>
                            <Compile Include="StartForm.Designer.cs">
                              <DependentUpon>StartForm.cs</DependentUpon>
                            </Compile>
                            <EmbeddedResource Include="StartForm.resx">
                              <DependentUpon>StartForm.cs</DependentUpon>
                            </EmbeddedResource>
                            ...
                            </ItemGroup>
                            

                            在此之后,如果您在 VS 中打开了新项目,它会识别更改并询问您是否要重新加载。

                            【讨论】:

                              【解决方案21】:
                              1. 转到 Visual Studio 并设置您的新项目。将在所选目标中创建一个新文件。

                              2. 现在转到要导出到刚刚创建的项目的数据的源文件。从源文件中复制所有文件。

                              3. 转到新的项目文件夹并将所有文件粘贴到那里。

                              4. 现在由于这些文件已经存在,将显示替换新项目文件的选项。只需点击替换现有文件。

                              5. 现在,检查您刚刚创建的项目。所有的变化都会出现在那里。

                              【讨论】:

                                【解决方案22】:

                                感谢 Harry Davis 在 https://quick-adviser.com 上的文章。有同样的问题,但这里没有一个解决方案对我有用。我还要承认我并不完全理解,因为我一周前才开始使用 VS,并希望将其用于课堂项目。该解决方案适用于 VS 2021。

                                1. 向项目中添加一个子文件夹。我通过右键单击解决方案资源管理器窗口中的项目名称并添加 > 新文件夹来完成此操作。
                                2. 右键单击新的子文件夹,然后单击添加 > 现有项目。
                                3. 浏览您要复制的 .cs 文件(不是 Design.cs,不是其他任何文件),然后单击“添加”。
                                4. 右键单击新添加的 .cs 文件,然后单击重命名。

                                【讨论】:

                                  猜你喜欢
                                  • 2011-09-18
                                  • 1970-01-01
                                  • 2012-01-12
                                  • 2015-08-13
                                  • 2010-10-10
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多