- - PR -
[VB.NET]TreeViewのドラッグ&ドロップについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-08-30 10:07
おはようございます。
アプリケーション間(同一のアプリケーションを重複起動)でTreeViewのノードをドラッグ&ドロップしたいのですが、どうもうまくいきません。 コードは、こんな感じです。(たぶん改行がうまく表示されずに見づらくなっていると思いますが、ご容赦を) Private Sub TreeView1_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles TreeView1.ItemDrag m_dragNode = Nothing If Control.ModifierKeys <> Keys.Control Then m_dragNode = CType(e.Item, TreeNode).Tag DoDragDrop(e.Item, DragDropEffects.Move) Else DoDragDrop(e.Item, DragDropEffects.Copy) End If End Sub Private Sub TreeView1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TreeView1.DragEnter If Not IsNothing(m_dragNode) Then e.Effect = DragDropEffects.Move Else e.Effect = DragDropEffects.Copy End If End Sub Private Sub TreeView1_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TreeView1.DragOver DragDropCheck(sender, e) End Sub Private Sub TreeView1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TreeView1.DragDrop If Not IsNothing(m_dragNode) Then '移動 DragDropMove(sender, e) Else 'コピー DragDropCopy(sender, e) End If End Sub Private Function DragDropCheck(ByVal sender As Object, ByVal e As DragEventArgs) As Boolean If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", False) Then Dim stPoint As Point Dim objTargetNode As TreeNode stPoint = CType(sender, TreeView).PointToClient(New Point(e.X, e.Y)) objTargetNode = CType(sender, TreeView).GetNodeAt(stPoint) If Not IsNothing(m_dragNode) Then Select Case Type(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode).Tag.GetType.ToString.Substring (CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode).Tag.GetType.ToString.LastIndexOf(".") + 1) Case 省略 End Select Else 省略 End If End If End Sub Private Sub DragDropMove(ByVal sender As Object, ByVal e As DragEventArgs) 'ドラッグムーブ 省略 End Sub Private Sub DragDropCopy(ByVal sender As Object, ByVal e As DragEventArgs) 'ドラッグコピー 省略 End Sub 単一のアプリケーション内でやっている場合は問題ないのですが、アプリケーション間ではうまくいきません。TreeNodeのTagにオブジェクトが入っていて、このオブジェクトをドラッグ&ドロップで移動やコピー(アプリケーション間の場合はコピーのみ)したいのですが、アプリケーション間ではこのTagの中身が参照できないようなのです。 DragDropCheckというFunctionで e.Effectを変更して、カーソルの表示を変えようとしているのですが、Tagの中身までは参照できないようで、カーソルが常に駐車禁止みたいなマークになってしまいます。 DoDragDropの引数にTagを入れても、クリップボードにTag内のオブジェクトを入れて、TreeView1_DragOverでクリップボードの中身を判定し、e.Effectを変更しようとしても、 やっぱりカーソルは変わりませんでした。 MSDNの、 http://www.microsoft.com/japan/msdn/net/upgrade/dragndropops.asp を参考にもしたのですが、これもダメでした。 どなたかご存知の方がおりましたら、どうか御教授を。 |
1