我正试图拖延将文件拖放到我的TreeList
。我能够移动TreeList
内的文件/文件夹,但我也想将文件从Windows资源管理器拖到我TreeList
的文件夹中。触发了dragdrop
的{{1}}事件,但两个节点(拖动和目标)都为空。 treeList
对于两个节点都不为空,e.Data
为e.Data
。转换到DataObject
节点时可能出现了问题,但此事件适用于拖放节点。下载TreeList
。如何解决节点问题?
这是出现问题的代码段:
TreeList
编辑我将代码编辑到适用于我的代码中。
答案 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
}
}