2011-04-16 7 views
0

私はWPF 4/VB.net 2010プロジェクトを持っていますが、私は視覚的なドラッグアンドドロップをしようとしていますMouseUpイベントでのマウスとのMouseDownの "スティック")私は背後に次のコードを持っている:。シミュレーションされたビジュアルドラッグ/ドロップ(このコードでは間違っているもの)

Private Sub Tile1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Tile1.MouseDown 
    Tile1.CaptureMouse() 
    IsDragging = True 
End Sub 

Private Sub Tile1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles Tile1.MouseMove 
    If IsDragging = True Then 
     Dim canvPosToWindow As Point = canv.TransformToAncestor(Me).Transform(New Point(0, 0)) 

     Dim r As Rectangle = TryCast(sender, Rectangle) 
     Dim upperlimit As Double = canvPosToWindow.Y + (r.Height/2) 
     Dim lowerlimit As Double = canvPosToWindow.Y + canv.ActualHeight - (r.Height/2) 

     Dim leftlimit As Double = canvPosToWindow.X + (r.Width/2) 
     Dim rightlimit As Double = canvPosToWindow.X + canv.ActualWidth - (r.Width/2) 

     Dim absmouseXpos As Double = e.GetPosition(Me).X 
     Dim absmouseYpos As Double = e.GetPosition(Me).Y 

     If (absmouseXpos > leftlimit AndAlso absmouseXpos < rightlimit) AndAlso (absmouseYpos > upperlimit AndAlso absmouseYpos < lowerlimit) Then 
      r.SetValue(Canvas.LeftProperty, e.GetPosition(canv).X - (r.Width/2)) 
      r.SetValue(Canvas.TopProperty, e.GetPosition(canv).Y - (r.Height/2)) 
     End If 
    End If 
End Sub 

Private Sub Tile1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Tile1.MouseUp 
    Tile1.ReleaseMouseCapture() 
    IsDragging = False 
End Sub 

私はこのエラーを取得しています:

Dim upperlimit As Double = canvPosToWindow.Y + (r.Height/2) 
Dim lowerlimit As Double = canvPosToWindow.Y + canv.ActualHeight - (r.Height/2) 

Dim leftlimit As Double = canvPosToWindow.X + (r.Width/2) 
Dim rightlimit As Double = canvPosToWindow.X + canv.ActualWidth - (r.Width/2) 
:次の行のそれぞれに

NullReferenceException, Object reference not set to an instance of an object.

私は間違って何をしていますか?

答えて

1

私は、この文はrが "null"で、適切な四角形ではないと考えます。

Dim r As Rectangle = TryCast(sender, Rectangle) 

送信者はおそらく長方形おそらくWPF-コントロール(System.Windows.Controls.Controlのいくつかのサブクラス)ではありません。

Visual Studioデバッガでこの行にデバッグポイントを配置し、このステートメントが評価されるかどうかを簡単に確認できます。

あなたのドラッグドロップの実装で幸いです:)。

+0

ブレークポイントを設定してもエラーが解消されなかったため、TryCastをDirectCastに変更しましたが、もちろんエラーが表示されました。私は長方形にラベルをキャストしようとしていました。 TY !! – CodeMouse92

関連する問題