我有一个列表视图,显示目录的内容。我已启用拖放到列表视图中,以便用户可以拖动文件 Windows资源管理器并将其放入列表视图中。然后我将这些文件复制到listview中显示的目录。
如果将Outlook中的电子邮件拖到桌面上或Windows资源管理器中的文件夹中,则会创建电子邮件的.msg文件。 用户现在想要从outlook拖动电子邮件并将其放入列表视图中。
当电子邮件在列表视图上有毒时,它不会将其视为有效的拖放对象。光标是一个圆圈,通过它而不是放置事件光标。
在listView1_DragEnter
事件中我有
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.All;
}
else
{
e.Effect = DragDropEffects.None;
}
我已经尝试了DataFormats.HTML
但是也没有看到任何东西掉落。有什么想法吗?
答案 0 :(得分:2)
在列表视图的DragEnter
活动中,返回以下DragDropEffects
:
private void listView_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
要在DragDrop
事件中提取和阅读Outlook消息,我建议使用this库。它非常易于使用:
private void listView_DragDrop(object sender, DragEventArgs e)
{
OutlookDataObject dataObject = new OutlookDataObject(e.Data);
//get the names and data streams of the files dropped
string[] filenames = (string[])dataObject.GetData("FileGroupDescriptor");
MemoryStream[] filestreams = (MemoryStream[])dataObject.GetData("FileContents");
for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++)
{
string filename = filenames[fileIndex];
MemoryStream filestream = filestreams[fileIndex];
OutlookStorage.Message message = new OutlookStorage.Message(filestream);
// do whatever you want with "message"
message.Dispose();
}
}