Devexpress将文件从资源管理器移动到TreeList中

时间:2014-11-10 09:13:24

标签: c# devexpress

我正试图拖延将文件拖放到我的TreeList。我能够移动TreeList内的文件/文件夹,但我也想将文件从Windows资源管理器拖到我TreeList的文件夹中。触发了dragdrop的{​​{1}}事件,但两个节点(拖动和目标)都为空。 treeList对于两个节点都不为空,e.Datae.Data。转换到DataObject节点时可能出现了问题,但此事件适用于拖放节点。下载TreeList。如何解决节点问题?

这是出现问题的代码段:

TreeList

编辑我将代码编辑到适用于我的代码中。

1 个答案:

答案 0 :(得分:0)

从Windows资源管理器拖动文件时,无法将其转换为TreeListNode对象,因为您正在拖动另一种类型的对象。您只能使用DataFormats.FileDrop作为e.Data.GetData方法的参数获取文件数组,并根据您投放到其中的文件在TreeList中创建/移动/删除节点:

private void treeList1_DragDrop(object sender, DragEventArgs e)
{
    var draggedNode = e.Data.GetData(typeof(TreeListNode)) as TreeListNode; //null        
    var targetNode = Tree.ViewInfo.GetHitTest(Tree.PointToClient(new Point(e.X, e.Y))).Node; // null

    if (targetNode == null) return;

    if (draggedNode != null)
    {
        if (targetNode[treeListColumn3].ToString() == "File")
        {
            if (targetNode.ParentNode == draggedNode.ParentNode)
                return;
            MoveInFolder(draggedNode, targetNode.ParentNode);
        }
        else
        {
            MoveInFolder(draggedNode, targetNode);
        }
        e.Effect = DragDropEffects.None;            
    }
    else
    {
        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);

        if (files == null) return;

        //Do something with your TreeList
    }
}