C#如何在Visual Studio项目中复制、粘贴窗体

7

我想创建一个几乎与我项目中已有的对话框完全相同的新表单。如果不必要,我不想浪费时间从头开始重新创建大部分表单。

我将其复制,然后粘贴到我的项目中,并将其从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.

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

还没有,我仍然遇到了这个问题。 - Kevin
3个回答

3
你可能有一些本地资源存储在名为Original.resx的文件中。
当你复制对话框时,它会复制此文件,但不会重命名它(尽管不应该这样)。请查看解决方案浏览器中Copy Of Original.cs下是否有.resx文件。如果是,请也将其重命名。
无论如何,值得执行清理操作(右键单击项目或解决方案)以清除obj和bin文件夹,然后尝试重新编译。

当我将Original.cs重命名为New.cs时,Copy Of Original.resx文件没有重构其名称。 - Kevin
我有几个控件,我将“GenerateMembers”属性设置为false,这就是为什么它首先创建了resx文件。在resx文件中,控件具有一个“PublicKeyToken”属性,在两个文件中都相同。我想知道这是否是问题的原因。 - Kevin
1
将GenerateMembers属性设置为false不应该驱动创建.RESX文件。检查每个类在.cs和designer.cs中的命名是否正确。我之前见过这种情况,当你复制一个表单并进入代码更改其类名时,Visual Studio会重构所有代码并在原始form.cs文件中更改类的名称(从而创建具有新名称的副本)。 - Simon Mark Smith

2

虽然原帖认为已经解决了问题,但我还是会回答这个老问题,以便于未来有类似问题的用户能够找到答案。

问题出在NewItem.cs中仍然包含与Original.cs同名的类。这种情况发生在文件名和类名不同的情况下(与Java的Eclipse不同,Visual Studio允许在C#项目中这样做)。复制并粘贴会在文件名前添加“Copy of”前缀,而重命名文件功能并不智能,无法意识到在这种情况下重命名类是合适的。

要解决这个错误,必须将重复的项目项中的类重命名。这里说的是项目项而不是文件,因为在WinForms中,这意味着两个文件:一个是默认情况下解决方案资源管理器显示的文件(右键单击-> 显示代码或者如果你看到可视化设计器则按F7),另一个是.designer.cs文件。我认为没有必要修改.resx文件。


0

当创建原始表单的副本时,VS不会更改原始命名空间(在您的情况下,它仍然是“Original”)。因此,只需将此复制的命名空间(在“Copy of Original”中)更改为某些唯一的内容即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接