【问题标题】:C# copy, paste a form in a Visual Studio projectC# 在 Visual Studio 项目中复制、粘贴表单
【发布时间】:2026-02-06 09:45:02
【问题描述】:

我想创建一个新表单,它几乎是我项目中已有对话框的副本。如果不需要的话,我不想浪费时间重新创建大部分表单。

我复制,然后将其粘贴到我的项目中,并将其从 Copy of Original.cs 重命名为 NewItem.cs

当我去重建我的解决方案时,我得到一个错误

The item "obj\Debug\Control.Forms.NewUser.resources" was specified more
than once in the "Resources" parameter.  
Duplicate items are not supported by the "Resources" parameter.

我做错了什么?有没有办法解决这个问题?

【问题讨论】:

  • 还没有,我还是有这个问题。

标签: c# winforms visual-studio-2005 resources


【解决方案1】:

您可能有一些本地资源存储在名为 Original.resx 的文件中

当您复制对话框时,它复制了该文件但没有重命名它(但这不应该发生)。查看解决方案资源管理器中 Original.cs 副本下是否有 .resx 文件。如果是这样,也重命名它。

可能值得执行清理(右键单击项目或解决方案)以清除 obj 和 bin 文件夹,然后尝试重新编译。

【讨论】:

  • 当我将 Original.cs 重命名为 New.cs 时,Original.resx 文件的副本确实重构了它的名称
  • 我有一些控件将“GenerateMembers”属性设置为 false,这就是它创建 resx 文件的原因。在 resx 文件中,控件具有两个文件中相同的“PublicKeyToken”属性。我想知道这是否是问题所在。
  • 将 GenerateMembers 属性设置为 false 不应驱动 .RESX 文件的创建。检查您的每个类在.cs 和designer.cs 中的名称是否正确。我之前已经看到,当您复制表单并进入代码以更改其类名时,Visual Studio 会重新分解所有代码并更改原始 form.cs 文件中的类名(从而创建具有新名称的副本)。
【解决方案2】:

老问题,但我会为未来的谷歌人回答,因为 OP 声称接受的答案没有解决问题。

问题是NewItem.cs 仍然包含一个与Original.cs 同名的类。当文件名和类名不同时会发生这种情况(与 Eclipse for Java 不同,Visual Studio 允许在 C# 项目中这样做)。复制粘贴将“复制”前缀附加到文件名和重命名文件功能不够智能,无法确定在这种情况下重命名类是合适的。

要修复错误,必须重命名重复项目项中的类。我说的是项目而不是文件,因为在 WinForms 的情况下,这意味着两个文件:一个是解决方案资源管理器默认显示的文件(右键单击 -> 显示代码,如果您受到视觉设计师的欢迎,则按 F7)和 .designer.cs。无需修改 .resx AFAIK。

【讨论】:

    【解决方案3】:

    创建原始表单的副本时,VS 不会更改原始命名空间(在您的情况下,它仍然是“原始”)。因此,只需将这个重复的命名空间(在“原始副本”中)更改为独特的东西。

    【讨论】:

      最近更新 更多