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

本文关键字:项目 一个 复制 另一个 解决方案 控件 用户 | 更新日期: 2023-09-27 18:32:19

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

我最初采取的步骤是:

1) 将控件(包括.csdesigner.cs.resx文件)从项目 1 复制到项目 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都不会自动更新?实际答案是知道此控件的使用位置并像我所做的那样自己更新声明吗?

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

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

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

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

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

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

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

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

请注意

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

相关文章: