代码之家  ›  专栏  ›  技术社区  ›  Vicky

在VB中单击并拖动用户控件。NET创建对象引用错误消息

  •  1
  • Vicky  · 技术社区  · 17 年前

    未能创建组件“用户控件1”。错误消息如下:

    “系统。NullReferenceException:对象引用未设置为对象的实例。 在系统中。组件模型。ReflectPropertyDescriptor。设置值(对象组件、对象值) .............. 等

    我应该怎么做来修复这个错误?

    4 回复  |  直到 11 年前
        1
  •  8
  •   Seth Spearman    17 年前

    当用户控件无法加载到VisualStudio designer中时,需要执行以下操作。这些指令是针对vb的。net项目,但c#应该类似。此外,在执行此操作之前,请关闭所有打开的窗口(或至少关闭正在处理的控件的源文件和设计器文件)

    最后一件事。您应该做的第一件事是确保重新启动visual studio不会解决问题。如果没有,你可以尝试下面的步骤。这些说明假定错误的用户控件位于visual studio中的控件库项目中。如果没有,你应该能够调整一点方向,让它工作,但当控件在自己的项目中时,它就容易多了。

    执行以下操作:

    1. 将控件库设置为启动项目。
    2. 打开控件库项目的属性,然后单击“调试”选项卡。
    3. 在“开始操作”下,单击“开始外部程序”选项,然后浏览到Visual Studio可执行文件。

    注意:这意味着,当您运行解决方案时,它将启动另一个Visual Studio实例,而不是实际运行您的解决方案。Visual studio的第一个实例(实例_1)在运行时将“托管”Visual studio的第二个实例(实例_2)。

    1. 运行你的解决方案。实例2将被加载。
    2. 切换回实例1。
    3. 在实例1中,点击CTRL-ALT-E。这将打开异常对话框。选中公共语言运行时异常旁边的抛出列复选框。

    注意:这将确保实例_1在任何运行时错误时都会中断,即使它在try块中被命中。

    1. 切换到实例2。在解决方案资源管理器中双击以打开错误的用户控件。

    您应该发现Visual Studio的实例_1应该在导致设计器无法加载控件的代码行处停止。修复代码(这通常意味着在引用对象属性之前测试IsNothing,但可能意味着其他事情)

    此外,有时我发现控件将加载到实例_2中,而不是在实例_1中出现错误时中断。在这种情况下,停止调试。。。关闭实例2。保存/重新启动实例_1,您的问题通常会消失。

    教训是这样的。用户控件必须能够加载/引用所有对象及其成员,才能将其加载到设计器中。因此,对于将放置在其他容器上的用户控件,我通常会设计事件来通知父控件,而不是试图将对象推入子控件。

    希望这有助于以后在这个老问题上的参考。

    赛斯

        2
  •  2
  •   Tom Walker    11 年前

    与打开表单进行编辑时发生的错误不同,这听起来像是在您已经在编辑表单并添加新的用户控件时发生的。A. CodeProject article 前面提到的内容显示了在表单加载不正确的情况下该怎么做,而不是特定的用户控件。

    用户控件是否有映射到自定义对象的属性(即 Integer String )? 如果是这样,表单设计器将尝试将属性加载到属性编辑器中。如果显示属性会产生错误,表单设计器将向您显示该错误。我认为这就是你的用户控制所发生的事情。

    如果你可以编辑问题并添加更多关于错误性质的信息(更多错误文本),这将有助于其他人更好地帮助你。或者,查看是否可以找到可能导致错误的属性(例如,是否有任何属性依赖于设置的非空值)。你也可以看看这个 MSDN article 有关如何仅在运行时限制控件的提示。

        3
  •  0
  •   Paul Fuller Paul Fuller    17 年前

    谢谢赛斯发这篇帖子!你的解决方案帮我把错误弄清楚了。我唯一要补充的是,当加载“INSTANCE_2”时,您可能需要实际加载INSTANCE_2中的项目文件。我需要这样做,因为我没有处理控件库,而是在表单所在的同一个项目中定义了自定义用户控件。在实例_2中加载项目后,我打开了出错表单,导致实例_1弹出到用户控件中有问题的代码行。

        4
  •  0
  •   eniacAvenger    11 年前

    我发现,当控制DLL没有正确构建时,经常会发生这种错误。95%的情况下,只需重新启动Visual Studio即可解决此问题。