首页 > 解决方案 > 类型 [CONTROL] 未定义

问题描述

我有一个我无法解决的小问题,不是很重要但很尴尬。

我有一个名为“MyApp”的 windowsForm 应用程序,使用一个名为“UserControl_Grille”的控件,有一天,我在我的解决方案中创建了一个文件夹来安排我的表单和我的控件。从今天开始,当我想向我的表单添加一个控件(甚至是本机 .NET 控件)时,我的控制台中出现了这个错误:

未定义类型“MyApp.UserControl_Grille”

要修复它,我将在 InitializeComponent 方法中的“MyApp.Designer”中查找并将“MyApp.UserControl_Grille”替换为“UserControl_Grille”

但不幸的是,每次我向表单添加新控件时,我都必须再次进行此操作.....

有人有想法一劳永逸地修复它吗?谢谢

标签: .netvb.netwinforms

解决方案


我在一个项目中发生了这种情况,我在其中定义了一个与我的项目同名的子命名空间(根命名空间)。当您的项目中某处的代码看起来像这样时,就会发生这种情况:

Namespace [Name of your Project/Root Namespace] [...] End Namespace

这样做的结果是您的项目包含“MyApp”命名空间和“MyApp.MyApp”命名空间(如果您查看项目的对象浏览器,您可以自己看到)。这种情况会导致设计器文件中的分辨率冲突,从而它在您的自定义控件的错误命名空间下查找。

解决此问题的几种可能方法:

  1. 在声明子命名空间的地方(如上面的示例代码),完全删除命名空间声明。这会将声明中的所有代码移动到您的根“MyApp”命名空间。如果不需要在子命名空间中包含该代码,则可以这样做。
  2. 在声明子命名空间的地方,右键单击命名空间名称并将其重命名为不同于根命名空间名称的名称。
  3. 如果您想保留子命名空间的名称,您可以将根命名空间重命名为唯一的名称,从我的项目 --> 应用程序 --> 根命名空间。

选项 1 是最简单的选项,应立即解决错误。

选项 2 是下一个最简单的方法,但是,例如,如果您将子命名空间重命名为“NewName”,则 Designer 文件中对“UserControl_Grille”的所有引用都将错误地重命名为“NewName.UserControl_Grille”,您将拥有将它们修复为“MyApp.UserControl_Grille”。

选项 3 是最繁琐的,因为您必须使用 Find and Replace 将所有 Designer 文件引用解析到 Root 命名空间,注意不要错误地替换对子 MyApp 命名空间的合法引用。


推荐阅读