作成日: 2023/07/14 最終更新日: 2023/07/14
文書種別
使用方法
詳細
TreeViewのノードをコードで直接設定している場合に、ドラッグ&ドロップによって1つ目のTreeViewから他のTreeViewにノードをコピーするには、C1TreeViewのDragEnter、DragDrop、およびItemDragイベントを利用し、Add、Insertメソッドを用いてノードの追加、挿入を行う方法が考えられます。
以下に、左側のTreeViewから右側のTreeViewへノードをコピーするための簡単な実装例を記載します。

◎サンプルコード(VB)
以下に、左側のTreeViewから右側のTreeViewへノードをコピーするための簡単な実装例を記載します。
◎サンプルコード(VB)
Imports C1.Win.TreeView
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
C1TreeView1.AllowDrop = True
C1TreeView2.AllowDrop = True
For i As Integer = 0 To 4
C1TreeView1.Nodes.Add("Node" & i)
C1TreeView2.Nodes.Add("Node" & i * 100)
For j As Integer = 0 To 4
C1TreeView1.Nodes(i).Nodes.Add("Node" & (i * 10 + j))
C1TreeView2.Nodes(i).Nodes.Add("Node" & (i * 100 + j))
Next
Next
AddHandler C1TreeView1.ItemDrag, AddressOf C1TreeView_ItemDrag
AddHandler C1TreeView2.ItemDrag, AddressOf C1TreeView_ItemDrag
AddHandler C1TreeView1.DragEnter, AddressOf C1TreeView_DragEnter
AddHandler C1TreeView2.DragEnter, AddressOf C1TreeView_DragEnter
AddHandler C1TreeView1.DragDrop, AddressOf C1TreeView_DragDrop
AddHandler C1TreeView2.DragDrop, AddressOf C1TreeView_DragDrop
End Sub
Private Sub C1TreeView_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs)
Dim distanceNodes = CType(e.Data.GetData(GetType(C1TreeNode())), C1TreeNode())
Dim distanceNode = distanceNodes(0)
Dim pos = CType(e.Data.GetData(GetType(DragDropPosition)), DragDropPosition)
Dim c1CopiedNode = New C1TreeNode(distanceNode.GetValue())
Dim treeView = CType(sender, C1TreeView)
Dim p = treeView.PointToClient(New Point(e.X, e.Y))
Dim currentNode = treeView.GetNodeAtPoint(p)
If currentNode IsNot Nothing Then
Dim index = currentNode.ParentCollection.IndexOf(currentNode)
Select Case pos
Case DragDropPosition.After
currentNode.ParentCollection.Insert(index + 1, c1CopiedNode)
Case DragDropPosition.Before
currentNode.ParentCollection.Insert(index, c1CopiedNode)
Case DragDropPosition.Inner
currentNode.Nodes.Add(c1CopiedNode)
End Select
Else
treeView.Nodes.Add(c1CopiedNode)
End If
End Sub
Private Sub C1TreeView_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs)
e.Effect = DragDropEffects.Move
End Sub
Private Sub C1TreeView_ItemDrag(ByVal sender As Object, ByVal e As C1.Win.TreeView.C1TreeViewItemDragEventArgs)
DoDragDrop(e.DraggedData, DragDropEffects.Move)
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.TreeView;
namespace DragAndDrop
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
c1TreeView1.AllowDrop = true;
c1TreeView2.AllowDrop = true;
c1TreeView1.ItemDrag += C1TreeView_ItemDrag;
c1TreeView2.ItemDrag += C1TreeView_ItemDrag;
c1TreeView1.DragEnter += C1TreeView_DragEnter;
c1TreeView2.DragEnter += C1TreeView_DragEnter;
c1TreeView1.DragDrop += C1TreeView_DragDrop;
c1TreeView2.DragDrop += C1TreeView_DragDrop;
}
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
c1TreeView1.Nodes.Add("Node" + i);
c1TreeView2.Nodes.Add("Node" + i * 100);
for (int j = 0; j < 5; j++)
{
c1TreeView1.Nodes[i].Nodes.Add("Node" + (i * 10 + j));
c1TreeView2.Nodes[i].Nodes.Add("Node" + (i * 100 + j));
}
}
}
private void C1TreeView_DragDrop(object sender, DragEventArgs e)
{
// get dropped data
var distanceNodes = (C1TreeNode[])e.Data.GetData(typeof(C1TreeNode[]));
var distanceNode = distanceNodes[0];
var pos = (DragDropPosition)e.Data.GetData(typeof(DragDropPosition));
var c1CopiedNode = new C1TreeNode(distanceNode.GetValue());
var treeView = (C1TreeView)sender;
var p = treeView.PointToClient(new Point(e.X, e.Y));
var currentNode = treeView.GetNodeAtPoint(p);
if (currentNode != null)
{
var index = currentNode.ParentCollection.IndexOf(currentNode);
switch (pos)
{
case DragDropPosition.After:
currentNode.ParentCollection.Insert(index + 1, c1CopiedNode);
break;
case DragDropPosition.Before:
currentNode.ParentCollection.Insert(index, c1CopiedNode);
break;
case DragDropPosition.Inner:
currentNode.Nodes.Add(c1CopiedNode);
break;
}
}
else // ツリーにノードがない場合
{
treeView.Nodes.Add(c1CopiedNode);
}
}
private void C1TreeView_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void C1TreeView_ItemDrag(object sender, C1.Win.TreeView.C1TreeViewItemDragEventArgs e)
{
DoDragDrop(e.DraggedData, DragDropEffects.Move);
}
}
}