【问题标题】:VS2017 C# Importing WinForms generates namespace errorsVS2017 C# 导入 WinForms 产生命名空间错误
【发布时间】:2020-08-11 04:55:50
【问题描述】:

我有两种解决方案,一种是功能性的,另一种是实验性的。我制作了一些表格和代码,我想从实验性导入到功能性。

我按照找到的指示 here 导入表单。

  1. 从 Experimental 文件夹添加现有文件(cs、designer 和 resx)
  2. 从解决方案中排除它们
  3. 从 Functional 文件夹中再次添加它们
  4. 完成(有点)

我遇到的是我需要更改 FormOne.Designer.cs 文件上的命名空间以匹配功能解决方案的命名空间:

namespace WindowsFormsApp1

改为:

namespace ProjName

完成此操作并保存后,FormOne 工作。

但是对于 FormTwo 和 FormThree 遵循完全相同的程序(一次一个表单)失败。当我尝试构建或重建解决方案或项目时,我得到:

FormTwo.Dispose(bool): no suitable method found to override

FormTwo 和 FormThree 都出现同样的错误。我复制/粘贴了命名空间行,以确保在输入时没有打错。

【问题讨论】:

  • 发布复制错误所需的最少代码量
  • 当您调整命名空间(不需要;您可以只导入缺少的命名空间)时,您是否不小心删除了 FormTwo 从 Form 继承的声明?

标签: c# winforms import visual-studio-2017 namespaces


【解决方案1】:

表单使用partial 类功能将您编辑的代码文件中的Form1 (Form1.cs) 与设计者编辑的文件中的Form1 (Form1.Designer.cs) 结合起来

设计器代码覆盖Dispose(),它可以覆盖该方法,因为Form1.cs 中的Form1 类继承自Form,后者具有可覆盖的Dispose()。设计器文件中的partial class Form1 不继承任何东西(它不能继承Form 也是因为这已经在Form1.cs 中完成;你不能继承两次)

如果您在 Form1.cs 类中更改 Form1 类的命名空间并忘记更改 Form1.Designer.cs 中类的命名空间,您将在项目中导致两个名为 Form1 的类,在不同的命名空间中。要覆盖的Form1 in the Designer file, that doesn't inherit from Form, cannot thus have aDispose()`:

FWIW 你不需要编辑命名空间;只需在新命名空间中的表单顶部添加“使用旧命名空间”即可在新命名空间的表单中使用旧命名空间中的表单

【讨论】:

  • 所以我发现仅仅输入或复制/粘贴新的命名空间是不够的。之后,我必须从右键菜单中实际选择重命名功能并运行它。然后打开表单 GUI 的选项卡,让它消化新的更改几秒钟。
  • 是的,命名空间如何更改(直接编辑、查找替换、重命名函数等)并不重要,它只需要在 FormX.cs 和 FormX.Designer.cs 之间保持一致,由于我上面给出的原因。
猜你喜欢
  • 1970-01-01
  • 2011-08-26
  • 2011-08-21
  • 2014-09-02
  • 2017-05-27
  • 1970-01-01
  • 2019-07-22
  • 2020-07-02
  • 1970-01-01
相关资源
最近更新 更多