我在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自动化代码生成。
此外,如果在错误之后按下“忽略并继续”链接,它会在设计时显示表格,但为什么它首先失败?
答案 0 :(得分:6)
以下是解决此问题的方法:
打开表单设计器。它是否正常打开?
如果是的话,那你就走在了正确的轨道上。
放回代码;一点一点地继续删除代码,直到您的表单打开。您删除的最后一个代码是问题。
当事件处理程序包含对不存在的对象的引用时,会发生这种情况。例如,如果在表单上放置一个按钮,则创建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语句添加处理程序。