C# 从剪贴板获取复制的电子邮件
我有一个显示目录内容的列表视图。我已启用拖放到listview中,以便用户可以从中拖动文件 Windows资源管理器并将其放到列表视图中。然后,我将这些文件复制到listview中显示的目录中 如果将电子邮件从outlook拖到桌面或Windows资源管理器中的文件夹中,则会创建电子邮件的.msg文件。 用户现在希望从outlook中拖动电子邮件并将其放到listview中 当电子邮件通过listview时,它不会将其视为有效的拖放对象。光标是一个圆,有一条线穿过它,而不是drop事件光标 在C# 从剪贴板获取复制的电子邮件,c#,email,outlook,clipboard,copy-paste,C#,Email,Outlook,Clipboard,Copy Paste,我有一个显示目录内容的列表视图。我已启用拖放到listview中,以便用户可以从中拖动文件 Windows资源管理器并将其放到列表视图中。然后,我将这些文件复制到listview中显示的目录中 如果将电子邮件从outlook拖到桌面或Windows资源管理器中的文件夹中,则会创建电子邮件的.msg文件。 用户现在希望从outlook中拖动电子邮件并将其放到listview中 当电子邮件通过listview时,它不会将其视为有效的拖放对象。光标是一个圆,有一条线穿过它,而不是drop事件光标 在列
列表视图1\u DragEnter
事件中,我有
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.All;
}
else
{
e.Effect = DragDropEffects.None;
}
我尝试了DataFormats.HTML
,但也没有看到任何可以放弃的内容。有什么想法吗
将从Outlook的列表部分拖动电子邮件。在listview的
DragEnter
事件中,返回以下DragDropEffects
:
private void listView_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
要在DragDrop
事件中提取和读取Outlook邮件,我建议使用库。它非常容易使用:
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();
}
}
private void listView\u DragDrop(对象发送方,DragEventArgs e)
{
OutlookDataObject数据对象=新的OutlookDataObject(即数据);
//获取已删除文件的名称和数据流
字符串[]文件名=(字符串[])dataObject.GetData(“FileGroupDescriptor”);
MemoryStream[]filestreams=(MemoryStream[])dataObject.GetData(“FileContents”);
对于(int fileIndex=0;fileIndex