2011-09-21 53 views
2

加載我正在處理的WinForms應用程序的mainform時,遇到了一個熟悉的異常:a「爲了防止在加載設計器之前可能發生數據丟失,必須解決以下錯誤「錯誤。堆棧跟蹤如下:查找VS2010中設計器異常的源代碼

Object reference not set to an instance of an object.  

Instances of this error (4) 

1. Hide Call Stack 

at System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value) 
at Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkPropertyDescriptor.SetValue(Object component, Object value) 
at System.Windows.Forms.Design.ControlDesigner.CanResetSizePropertyDescriptor.SetValue(Object component, Object value) 
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializePropertyAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement, CodePropertyReferenceExpression propertyReferenceEx, Boolean reportError) 
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement) 
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement) 

我知道是什麼導致了這個錯誤 - 有在MainForm的地方埋四根線,引用了並不在設計時存在的Image對象。我甚至知道如何解決這個錯誤,這要歸功於this post at MSDN。麻煩的是,我找不到引發異常的行。通常我會使用Error List window導航到異常,但它表示沒有錯誤。關於如何找到違規行的任何想法?

回答

2

我通常會發現這涉及託管在依賴於DI容器或類似的表單上的用戶控件,但正如您所說,有時很難從設計人員提供的調用堆棧中確定源代碼。如果您是舉辦很多的控制,找出哪些控件導致不潛水的問題到每一個你可以:

  1. 會做出直接託管窗體上的用戶控件的列表,然後
  2. 創建一個新的臨時表,然後
  3. 拖放在您的列表中的用戶控件到窗體,看看哪一個殺死設計師