[英]Devexpress move file from explorer into TreeList
我正在尝试将文件拖放到TreeList
。 我可以移动TreeList
内的文件/文件夹,但我也想将文件从Windows资源管理器拖到TreeList
的文件夹中。 触发treeList
的dragdrop
事件,但两个节点(拖动和目标)均为空。 两个节点的e.Data
都不为空, e.Data
是一个DataObject
。 转换为TreeList
节点可能出了点问题,但是此事件适用于拖放到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
var nodeTarget = Tree.ViewInfo.GetHitTest(Tree.PointToClient(new Point(e.X, e.Y))).Node;
TreeListNode node;
FileInfo fi;
foreach (string s in files)
{
fi = new FileInfo(s);
node = Tree.AppendNode(new object[] { s, fi.Name, "File", fi.Length, fi }, nodeTarget);
node.HasChildren = false;
MoveInFolder(node, nodeTarget);
}
}
编辑我将代码编辑为对我有用的代码。
从Windows资源管理器中拖动文件时,无法将其转换为TreeListNode
对象,因为您正在拖动其他类型的对象。 您只能通过使用DataFormats.FileDrop
作为e.Data.GetData
方法的参数来e.Data.GetData
文件数组,并根据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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.