我创建了一个自定义数据网格控件。我在Windows窗体上拖动它并将其属性设置为列和所有&跑了这个项目。它构建成功,我能够在表单上查看网格控件。
现在,如果我尝试在设计器中查看该表单,我会收到以下错误..
Object reference not set to an instance of an object.
Instances of this error (1)
1. Hide Call Stack
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.GetMemberTargetObject(XmlElementData xmlElementData, String& member)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.CreateAssignStatement(XmlElementData xmlElement)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.XmlElementData.get_CodeDomElement()
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.EndElement(String prefix, String name, String urn)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.Parse(XmlReader reader)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.ParseXml(String xmlStream, CodeStatementCollection statementCollection, String fileName, String methodName)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.OnMethodPopulateStatements(Object sender, EventArgs e)
at System.CodeDom.CodeMemberMethod.get_Statements()
at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)
如果我忽略该异常,表单将显示为空白,并且没有网格控件的迹象。但是我可以在设计器文件中看到网格的代码。
任何关于此的指针都会有很大的帮助。
我为自定义要求定制了网格,就像我添加了自定义文本框一样。我已经定义了3个构造函数
public GridControl()
public GridControl(IContainer container)
protected GridControl(SerializationInfo info, StreamingContext context)
答案 0 :(得分:0)
听起来你的控件的默认构造函数(没有参数的构造函数)中会抛出NullReferenceException
。显然,这个异常仅在设计时抛出,因为你说它在运行时工作。您是否在此构造函数中执行任何初始化代码,如数据库调用或类似的?或者您是否使用了在设计时可能无法使用的任何实例?
答案 1 :(得分:0)
表单设计者似乎正在尝试初始化控件。然而,它试图初始化的属性可能已从UserControl中删除。有很多方法可以解决这个问题。我建议你在设计时调试控件。这是找到问题的最可靠方法。在http://social.msdn.microsoft.com/Search/en-US?query=design-time+control+debugging&ac=8
查看“MSDN Search”中的“设计时控制调试”答案 2 :(得分:0)
我一直有这个问题......很糟糕。
[漫步(上)]
我认为这就是我所知道的:
自定义对象类型的任何公共字段或属性几乎总会导致设计人员混淆*。我发现以下属性可以解决大多数这些问题:
[可浏览(假)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
没有默认构造函数的公共字段或属性总是会导致设计人员混淆。当您在表单上删除用户控件时,设计器会有效地创建控件。因此任何公共对象都需要一个清晰的创建路径。我发现最简单的方法(读取hack)是将非平凡的自定义类保持为私有,并将公共属性公开为外观。
- 我说重启visual studio是因为有时候设计师“卡住”了一个不存在的错误吗?我希望我做到了。
[漫步(关闭)]
我希望其中一些有帮助..
*设计师混淆:设计师不会显示您的控件,而是向您显示一条无用的错误消息,该消息可能包含或可能不包含可以保护您免受代码丢失的可怕警告......等等,等等。
答案 3 :(得分:0)
我遇到了同样的错误检查你的Windows Form类是否继承了System.Windows.Forms.Form类,如Form1:Form
希望dis help !!!!