0

我正在构建一个 Excel-DNA XLL,其中一种形式允许用户将图像从 ListView 拖放到 Excel 工作表(或任何其他 Microsoft Office 文档)中。虽然这看起来很容易,但我的第一个解决方案失去了透明度。

string name = myListView.FocusedItem.ImageKey;
var image = myListView.LargeImageList.Images[name];
myListView.DoDragDrop(image, DragDropEffects.All);

通过将图像以 PNG 格式保存到 MemoryStream 并使用 Clipboard.SetData(),我设法让复制和粘贴工作。我更进一步将图像粘贴到 DoDragDrop 方法中。这行得通。

string name = myListView.FocusedItem.ImageKey;
var image = myListView.LargeImageList.Images[name];
using (var stream = new MemoryStream())
{
    image.Save(stream, ImageFormat.Png);
    Clipboard.SetData("PNG", stream);
    myListView.DoDragDrop(Clipboard.GetDataObject(), DragDropEffects.All);
}

我宁愿不改变剪贴板的内容,但是当我试图避免它时,数据拒绝丢弃。

string name = myListView.FocusedItem.ImageKey;
var image = myListView.LargeImageList.Images[name];
using (var stream = new MemoryStream())
{
    image.Save(stream, ImageFormat.Png);
    IDataObject data = new DataObject("PNG", stream);
    myListView.DoDragDrop(data, DragDropEffects.All);
}

我确信这与内存流有关,复制和粘贴可能会强制读取整个流。我真的不知道,但无论哪种方式,我似乎都找不到使用剪贴板的解决方法。

4

0 回答 0