在同一解决方案中将用户控件从一个项目复制到另一个项目

Copy User Control from one project to another within same solution

有时,一个 C# 项目中会有一个属于另一个 C# 项目的用户控件,我必须将它移过去。尝试简单地复制和粘贴该用户控制会导致命名空间错误。假设项目 1 的命名空间为 namespace General.Category1.Controls,项目 2 的命名空间为 namespace General.Category2.Controls.

我最初采取的步骤是:

1) 从项目 1 复制 + 粘贴控件(包括 .csdesigner.cs.resx 文件)到项目 2

2) 将命名空间更改为项目 2 的 namespace General.Category2.Controls

此时在构建时,我从使用此控件的表单中收到了额外的错误,该错误在声明 'The type of namespace name 'UserControl1' does not exist in namespace 'General.Category1.Controls' (are you missing an assembly reference?) 的复制 + 粘贴之前出现。结果是 designer.cs 表单文件在复制 + 粘贴后没有更新到正确的命名空间。

那么我再添加一个额外的步骤:

3) 更改声明以匹配 General.Category2.controls 又名 private General.Category2.Controls UserControl userControl1;

的新名称空间

我很困惑为什么 designer.cs 文件不会更新它,因为通常不建议编辑 designer.cs 文件。但话又说回来,只要您不触及实际文件本身中所述的 InitializeComponent() 方法,就可以修改它们。

总之,为什么所有designer.cs都没有自动更新?知道这个控件在哪里使用并像我一样自己更新声明的实际答案吗?

[编辑]:前两步是针对控件本身的(它是 .cs.designer.cs 文件)。第三步是在复制之前与控件所在的任何表单相关联,因为它仍在使用旧的命名空间,因此所有表单 .designer.cs 文件也必须更改。

去过那里!我不为此使用复制粘贴。 在VS-2017中可以将一个UserControl1复制到另一个项目中,如下:

  • 在Windows中:将UserControl1.cs、.designer.cs和.resx复制到你的新项目中 目录
  • 在 VS 中:在解决方案资源管理器中右键单击您的项目,将其设置为 Startup 项目

  • 在解决方案资源管理器中右键单击新项目,然后选择添加现有项

  • 现在,select 只有 UserControl1.cs文件框里的文件

  • 等等,Solution Explorer 将注册其他文件,更改符号
  • 在 VS 中,打开 UserControl1.designer.cs .. 将命名空间 更改为新项目命名空间
  • 在 VS 中,打开 UserControl1.cs,将命名空间 更改为新项目命名空间

完成此步骤后,重建您的新项目。转到表单设计并打开工具箱。工具箱将显示您的用户控件。

注意 如果您将控件移动到新的框架或核心 class 库中,请注意,尚未引用 WinForms!请确保在使用我上面的提示添加现有项目之前添加对 System.Windows.Forms 的引用。