在设计器中打开VB.NET Windows窗体时出现错误“值不能为null。参数名称:objectType”

时间:2014-05-22 22:19:14

标签: vb.net winforms visual-studio-2010

我在VB.NET中使用Windows Forms App它运行正常,我手动添加了一些代码事件,没有设计师,如下所示:

  

Private Sub bindingNavigatorAddNewItem_Click(sender As System.Object,   e As System.EventArgs)处理BindingNavigatorAddNewItem.Click

     

namesBindingSource.AddNew()

     

End Sub

一个Form1.Designer.vb,InitializeComponent方法这段代码

  

AddHandler Me.BindingNavigatorAddNewItem.Click,AddressOf   Me.bindingNavigatorAddNewItem_Click

现在,即使表单运行正常,事件也正确执行;表单在设计时失败并出现错误:

  

值不能为空。参数名称:objectType

     

在   System.ComponentModel.TypeDescriptor.TypeDescriptionNode.GetRuntimeType(类型   objectType)at   System.ComponentModel.TypeDescriptionProvider.GetRuntimeType(类型   reflectionType)at   Microsoft.VisualStudio.Design.MultiTargetingContextProvider.GetRuntimeType(类型   objectType)at   Microsoft.VisualStudio.Design.Serialization.CodeDom.HandlesClauseManager.GetFieldType(字符串   fieldName,Type documentBaseType)at   Microsoft.VisualStudio.Design.Serialization.CodeDom.HandlesClauseManager.GetReferencedComponentType(字符串   componentName,CodeTypeDeclaration codeTypeDecl,   ITypeResolutionService loader,IDictionary&缓存)   Microsoft.VisualStudio.Design.Serialization.CodeDom.HandlesClauseManager.ParseHandlesClauses(CodeTypeDeclaration   codeTypeDecl,Boolean updateCache)at   Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.OnMethodPopulateStatements(对象   发件人,EventArgs e)at   System.CodeDom.CodeMemberMethod.get_Statements()at   System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager   经理,CodeTypeDeclaration declaration)   System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager   经理)   Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager   serializationManager)at   System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost   主机)

现在,我注意到如果我按设计师绑定事件而不是手动绑定事件就不会发生。

但是我仍然需要手动完成,因为它最终会由一些DTE自动化代码生成。

此外,如果在错误之后按下“忽略并继续”链接,它会在设计时显示表格,但为什么它首先失败?

3 个答案:

答案 0 :(得分:6)

以下是解决此问题的方法:

  1. 进入表单代码
  2. 删除公共类(您的表单名称)和结束类之间的所有内容。
  3. 打开表单设计器。它是否正常打开?

    如果是的话,那你就走在了正确的轨道上。

    放回代码;一点一点地继续删除代码,直到您的表单打开。您删除的最后一个代码是问题。

    当事件处理程序包含对不存在的对象的引用时,会发生这种情况。例如,如果在表单上放置一个按钮,则创建Click事件处理程序,然后从表单中删除此按钮。

答案 1 :(得分:1)

我也找到了另一个原因......

检查事件名称的大写/小写!我们的一个控件被重命名,所以它是CtlBlah而不是ctlBlah。该事件仍处于小写状态。将其切换到适当的大小写以匹配固定它的实际控制。

答案 2 :(得分:0)

找到它,事件的代码需要删除“Handles ...”子句,如

  

Private Sub bindingNavigatorAddNewItem_Click(sender As System.Object,   e As System.EventArgs)

     

namesBindingSource.AddNew()

     

End Sub

现在,Form从第一次开始在Designer中正确打开。

更新:我不得不用AddHandler语句添加处理程序。