未定义类型[CONTROL]

时间:2019-05-27 08:23:59

标签: .net vb.net winforms

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

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

  

类型'MyApp.UserControl_Grille'未定义

要修复此问题,我要在InitializeComponent方法中进入“ MyApp.Designer”,以找到并将“ MyApp.UserControl_Grille” 替换为“ UserControl_Grille” < / p>

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

有人想一劳永逸地解决它吗? 谢谢

1 个答案:

答案 0 :(得分:0)

我在一个项目中发生了这种情况,在该项目中我定义了一个与我的项目同名的子命名空间(根命名空间)。当您的项目中的代码如下所示时,就会发生这种情况:

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最为繁琐,因为您必须使用“查找和替换”来解析所有对Root名称空间的Designer文件引用,请注意不要错误地替换对Sub-MyApp名称空间的合法引用。