2010-04-13 59 views
0

我已经创建了一个自定义数据网格控件。我把它拖到windows窗体上,并设置它的属性,如列和所有&运行该项目。它成功构建,我可以在窗体上查看网格控件。VS 2008设计师和用户控​​件

现在,如果我尝试在设计这种形式,我收到以下错误..

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

我一直有这个问题......它很烂。

[漫步(上)]

这是我想我知道:

  1. 当设计一个窗体上放置控件。经常建立和刷新......这会让你知道什么样的变化导致了设计师的失败。
  2. 关闭visual studio一直重新打开....我不能告诉你有多少次我追赶设计师被“卡住”的设计师错误。
  3. 你明白这一点非常重要:设计师真的很傻,就像一堆石头一样愚蠢。
  4. 自定义对象类型的任何公共字段或属性几乎总会导致设计器混淆*。我发现下面的属性将清理这些问题大部分:

    [可浏览(假)]

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)

  5. 公共字段或属性没有默认构造总会导致设计师混乱。当你在表单上放置一个用户控件时,设计师可以有效地创建控件..因此任何公共对象都需要一个清晰的创建路径。我发现解决这个问题的最简单方法就是保留非平凡的自定义类,并将公有属性作为外观。

- 难道我说的重新启动Visual Studio,因为有时候设计师是“卡住”上不存在错误。我希望我做了什么。

[漫步(关闭)]

我希望一些这有助于..

*设计师的困惑:除了显示您的控件的设计显示了一个无用的错误消息可能会或可能不包括可怕的警告,它是保护你免受代码丢失......等等,等等。

0

这听起来像一个NullReferenceException在控件的默认构造函数(一个不带参数)被抛出。显然,这个异常只是在设计时抛出,因为你说它在运行时工作。你是否在这个构造函数中执行任何初始化代码,如数据库调用或类似的?或者您是否使用在设计时可能无法使用的任何实例?

+0

我尝试在所有构造函数中使用try..catch块。但我无法捕捉到任何异常。 我没有在初始化中进行任何数据库调用。我只是创建列和所有。 – Ram 2010-04-14 05:02:29

+0

尝试删除默认构造函数中的所有代码。问题是否仍然存在?如果没有,请重新添加您的构造函数代码(或逐块),您将看到代码的哪个部分导致问题。请记住,在代码发生任何更改后重新编译项目,否则设计人员将使用上次编译的代码。 – gehho 2010-04-14 06:13:15

+0

我不认为这与构造函数有什么关系。请注意,序列化正在抛出异常。具体来说,GetMemberTargetObject。我相信这是由于控制中缺少一名成员。设计师正试图恢复财产的价值,财产不见了。 – AMissico 2010-04-15 01:22:22

0

我已经运行到相同的错误检查您的Windows窗体类是否继承自System.Windows.Forms.Form类Form1:Form Hope dis help !!!!