2011-10-25 6 views
0

私は2つの(Telerik)TreeViewコントロールを持っています。それらをtvSourceおよびtvDestと呼ぶことにしましょう。私はtvSourceからtvDestに項目をドラッグ・アンド・ドロップしたい。私はこれをややうまく使っていますが、2つの問題が発生しています:ドラッグアンドドロップ:移動項目の代わりにコピー

1)これは現在項目を移動することです。代わりに、それらをtvSourceからtvDestにコピーして、アイテムをtvSourceに残しておきます。

2)アイテムをtvSourceコントロールからドラッグできるようにするには、DragDropを有効にする必要があります。これを有効にすると、ユーザーはtvSourceコントロール内でドラッグ&ドロップできます。これは私が望むものではありません。アイテムは、他のコントロール(tvDest)にドラッグ(コピー)することしかできません。

以下

は、これまでの私のコードです:

Private blnMouseIsDown As Boolean = False

Private Sub tvSource_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles tvSource.MouseDown 
    blnMouseIsDown = True 
End Sub 

Private Sub tvDest_DragDrop(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles tvDest.DragDrop 
    Dim p As Point = tvDest.PointToClient(New Point(e.X, e.Y)) 
    Dim hoverNode As RadTreeNode = tvDest.GetNodeAt(p.X, p.Y) 
    If hoverNode Is Nothing Then 
     tvDest.Nodes.Add(e.Data.GetData(DataFormats.Text).ToString()) 
     Return 
    End If 
End Sub 

Private Sub tvDest_DragEnter(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles tvDest.DragEnter 
    If e.Data.GetDataPresent(DataFormats.Text) Then 
     e.Effect = DragDropEffects.Copy 
    Else 
     e.Effect = DragDropEffects.None 
    End If 
End Sub 

Private Sub tvSource_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles tvSource.MouseMove 

    If blnMouseIsDown Then 
     tvSource.DoDragDrop(tvSource.SelectedNode.Name, DragDropEffects.Copy) 
    End If 
    blnMouseIsDown = False 

End Sub 

+1

あなたは、そのコントロールで組み込みD + Dサポートと戦っているように私に聞こえます。 Telerikサポートフォーラムを使用してヘルプを検索してください。 –

+0

@ハンス:Telerikのフォーラムはあまり良くありません。 Telerikはあまり使用されるコントロールセットなので、私の質問はもっと早く、より良い答えになると思います... –

答えて

0

彼らのサポートサイト、Enabling Drag and Dropからは、enabledプロパティAllowDragDropを持っている場合、それはどのハンス(デフォルトでは、完全な移動を実行しますように、それが見えます示された)。 falseに設定してみてください。

tvDestの場合は、AllowDropプロパティを有効にします。これにより、標準的なウィンドウのドラッグアンドドロップ機能が有効になります。

また、私はblnMouseIsDown変数またはMouseMoveイベントを持つ必要はないと思います。代わりにDoDragDropメソッドをMouseDownイベントに移動します。

+0

tvSourceのAllowDragDropを無効にすると、ドラッグする機能も無効になるため、有効にする必要があります。 –

+0

@JanvB DoDragDropは間違っていると動作しません。奇妙な要求のようです。あなたはそのコントロール内に何もドロップしたくないので、tvSourceはAllowDragDropとAllowDropを無効にする必要があります。 – LarsTech

+0

tvSourceでそれを無効にすると、DropHintはtvDestコントロールで動作していないため、ツリー内の場所をもう選択できないため、間違った足に置かれました。 –

関連する問題