1

私はTreeView別の形で 2 つ持っています。

  • treeView1
  • treeView2

Drag and Dropツリーから別のツリーにドラッグできるように機能を実装しました。3 つのイベントを処理する必要があるここで見つけたコードで問題なく動作します。

問題は、私のウィンドウのセットアップが次のようになっていることです。

ここに画像の説明を入力

ご覧のとおりWindow2、myWindow1を非表示にしていますが、これは意図的なものであり、このままにしておく必要があります。問題は、私の目的地Drag and DropWindow2to でWindow1あるため、宛先ノードを指定できないことです。TreeView宛先ノードなしで単純にドロップして、他のノードの隣に親ノードを作成する方法はありますか?


リンクダイの例はそうではありません:

private void Form1_Load(object sender, System.EventArgs e)
{
    this.treeView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
    this.treeView2.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
    this.treeView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);
    this.treeView2.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);
    this.treeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);
    this.treeView2.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);   
}

private void treeView_ItemDrag(object sender,
        System.Windows.Forms.ItemDragEventArgs e)
{
    DoDragDrop(e.Item, DragDropEffects.Move);
}

private void treeView_DragEnter(object sender,
        System.Windows.Forms.DragEventArgs e)
{
    e.Effect = DragDropEffects.Move;
}

private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
    TreeNode NewNode;

    if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
    {
        Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
        TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt);
            NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
        if(DestinationNode.TreeView != NewNode.TreeView)
        {     
            DestinationNode.Nodes.Add((TreeNode) NewNode.Clone());
            DestinationNode.Expand();
            //Remove Original Node
            NewNode.Remove();
        }
    }
}
4

1 に答える 1

2

treeview_dragdrop両方formsを次のように変更します。

   private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
        TreeNode NewNode;

        if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
        {
            NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
            if (!(sender as TreeView).Nodes.Contains(NewNode))//Edit: add this if you don't want to add the same one again.
            {    
                 (sender as TreeView).Nodes.Add((TreeNode) NewNode.Clone());                 
                 NewNode.Remove(); //Edit: add this if you want to remove original one.
            } 
        }
    }
于 2012-12-10T16:52:29.290 に答える