繁体   English   中英

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

[英]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 到项目 2 复制 + 粘贴控件(包括.csdesigner.cs.resx文件)

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 aka private General.Category2.Controls UserControl userControl1;新命名空间private General.Category2.Controls UserControl userControl1;

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

总之,为什么所有的designer.cs没有自动更新? 是否知道在哪里使用此控件并像我所做的那样自己更新声明的实际答案?

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

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

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

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

  • 现在,在文件框中选择UserControl1.cs文件

  • 等待,解决方案资源管理器将注册其他文件,更改符号
  • 在 VS 中,打开UserControl1.designer.cs .. 将命名空间更改为新的项目命名空间
  • 在 VS 中,打开UserControl1.cs,将命名空间更改为新的项目命名空间

在这一步之后,重建你的新项目。 转到表单设计并打开工具箱。 Toolbox 将显示您的 UserControl。

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

暂无
暂无

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

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