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

Fer*_*hez 2 vb.net visual-studio-2010 winforms

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

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

namesBindingSource.AddNew()

结束子

而Form1.Designer.vb,InitializeComponent方法就是这个代码

AddHandler Me.BindingNavigatorAddNewItem.Click,AddressOf Me.bindingNavigatorAddNewItem_Click

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

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

在System.ComponentModel.TypeDescriptor.TypeDescriptionModel.TypeDescriptor.TypeDescriptionNode.GetRuntimeType(Type objectType)at System.ComponentModel.TypeDescriptionProvider.GetRuntimeType(Type reflectionType)at Microsoft.VisualStudio.Design.MultiTargetingContextProvider.GetRuntimeType(Type objectType)at Microsoft.VisualStudio.Design.Serialization.CodeDom Microsoft.VisualStudio.Design.Serialization.CodeDom.HandlesClauseManager中的.HandlesClauseManager.GetFieldType(String fieldName,Type documentBaseType)at Microsoft.VisualStudio.Design.Serialization.CodeDom.HandlesClauseManager.GetReferencedComponentType(String componentName,CodeTypeDeclaration codeTypeDecl,ITypeResolutionService loader,IDictionary&cache)位于System.ComponentModel.Design.Serialization.TypeCodeDomSe的System.CodeDom.CodeMemberMethod.get_Statements()的Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.OnMethodPopulateStatements(Object sender,EventArgs e)中的.ParseHandlesClauses(CodeTypeDeclaration codeTypeDecl,Boolean updateCache)在System.ComponentModel.Design上的Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)的System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)中的rializer.Deserialize(IDesignerSerializationManager manager,CodeTypeDeclaration declaration) .Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)

现在,我注意到如果我通过设计器而不是手动绑定事件,就不会发生这种情况.

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

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

小智 8

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

  1. 进入表单代码
  2. 删除公共类(您的表单名称)和结束类之间的所有内容.

打开表单设计器.它正常打开吗?

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

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

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