2014-11-14 44 views
0

我遇到了一些WPF代碼的問題。這是我之前在另一個項目中使用的代碼,運行良好。我有一個Dots.cs類,它是包含我的主Window1.xaml.cs的項目的依賴項。WPF NullReferenceException

在Dots.cs我有這樣的功能:

public void MakeDraggable(Canvas theCanvas) 
    { 
     _canvas = theCanvas; 
     _canvas.PreviewMouseDown += DPreviewMouseLeftButtonDown; 
    } 

我接收到的InnerException「{System.NullReferenceException:對象不設置爲一個對象的一個​​實例。 在GraphicsBook.Dot.MakeDraggable(帆布theCanvas)在... \ Dot.cs:線261 在GraphicsBook.Window1..ctor()在... \ Window1.xaml.cs:線47}

我Window1.xaml.cs內MakeDraggable方法的調用是:

myDots = new Dot[3]; 
    myDots[0] = new Dot(new Point(-40, 60)); 
    myDots[1] = new Dot(new Point(40, 60)); 
    myDots[2] = new Dot(new Point(40, -60)); 
    for (int i = 0; i < 3; i++) 
    { 
     myDots[i].MakeDraggable(gp); 
     gp.Children.Add(myDots[i]); 
    } 

對於Dot.cs清晰度261線是:

_canvas.PreviewMouseDown += DPreviewMouseLeftButtonDown; 

和線路47 Window1.xaml.cs是:

myDots[i].MakeDraggable(gp); 
+0

幾乎所有的'NullReferenceException'都是一樣的。請參閱「[什麼是.NET中的NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)」的一些提示。 – 2014-11-14 17:15:40

回答

2

在使用它們之前驗證您的方法的參數是有益的。這樣,你就會知道你有很好的價值。在你的情況下,你的對象gp很可能是空的。你可以使用斷點找到它。

爲了使其更加堅固,可以添加參數檢查你的MakeDraggable像這樣:

public void MakeDraggable(Canvas theCanvas) 
{ 
    if (theCanvas == null) 
    { 
     throw new ArgumentNullException("theCanvas"); 
    } 

    _canvas = theCanvas; 
    _canvas.PreviewMouseDown += DPreviewMouseLeftButtonDown; 
} 

現在,如果你曾經電話與MakeDraggable空,你會得到明確的說法空異常,而不是的描述性較差的NullReferenceException。

+0

謝謝,就是這樣!我沒有在我的XAML中正確設置它。 – petehallw 2014-11-15 16:47:53

相關問題