.net 未定义类型[CONTROL]

.net 未定义类型[CONTROL],.net,vb.net,winforms,.net,Vb.net,Winforms,我有一个小问题,我不能解决,不是很重要,但很尴尬 我有一个名为“MyApp”的windowsForm应用程序,它使用一个名为“UserControl\u Grill”的控件。有一天,我在解决方案中创建了一个文件夹来安排我的表单和控件。从今天起,当我想在窗体中添加控件(甚至是本机.NET控件)时,我在控制台中遇到了以下错误: 未定义类型“MyApp.UserControl\u” 为了修复它,我将在InitializeComponent方法中的“MyApp.Designer”中查找并替换“MyApp

我有一个小问题,我不能解决,不是很重要,但很尴尬

我有一个名为“MyApp”的windowsForm应用程序,它使用一个名为“UserControl\u Grill”的控件。有一天,我在解决方案中创建了一个文件夹来安排我的表单和控件。从今天起,当我想在窗体中添加控件(甚至是本机.NET控件)时,我在控制台中遇到了以下错误:

未定义类型“MyApp.UserControl\u”

为了修复它,我将在InitializeComponent方法中的“MyApp.Designer”中查找并替换“MyApp.UserControl\u grill”“UserControl\u grill”

但不幸的是,每次我在窗体中添加一个新控件时,我都必须再次执行此操作

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

我在一个项目中实现了这一点,在这个项目中,我定义了一个与我的项目同名的子命名空间(根命名空间)。当您的项目中的某个地方有这样的代码时,就会发生这种情况:

Namespace[项目名称/根命名空间]
[...]
结束命名空间

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

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

  • 在声明子名称空间的地方(如上面的示例代码所示),请完全删除名称空间声明。这将把声明中的所有代码移到根“MyApp”命名空间中。如果不需要在子命名空间中包含该代码,则可以这样做
  • 在声明子命名空间的位置,右键单击命名空间名称并将其重命名为根命名空间名称以外的名称
  • 如果希望保持子命名空间的名称不变,可以将根命名空间重命名为“我的项目-->应用程序-->根命名空间”中唯一的名称
  • 选项1是最简单的选项,应该立即解决错误

    选项2是下一个最简单的选项,但是,例如,如果您将子命名空间重命名为“NewName”,则设计器文件中对“UserControl\u grill”的所有引用都将被错误地重命名为“NewName.UserControl\u grill”,您必须将其修复为“MyApp.UserControl\u grill”


    选项3是最乏味的,因为您必须使用Find和Replace解析对根命名空间的所有设计器文件引用,小心不要错误地替换对子MyApp命名空间的合法引用。

    解决方案的根命名空间(属性->应用程序)是什么?如何将UserControl添加到表单中?根命名空间是“myApp”,要添加我的控件,我只需将其拖放到我的解决方案浏览器中。您是否可以尝试以下两种方法?1.删除根命名空间并检查是否仍然存在问题。2.仍然使用根命名空间并将“namespace MyApp”和“End namespace”添加到您的usercontrol中,并检查是否仍然存在问题?使用第一个选项,问题仍然存在。有了你的第二个,问题消失了,但我失去了我所有的控制权。。。是否没有其他选项可以返回到项目的初始状态?即使我删除了我的新文件夹,我也没有做过任何VB.NET的东西。但我认为问题在于您的usercontrol没有名称空间,当您拖放它时,它将与名称空间一起添加。因此,我认为您有以下两个选项,为每个自定义控件添加一个名称空间,即使在将来,只需拖放它并立即进行一次大修。或者通过代码创建usercontrol,不要使用拖放。