2

这是我当前的拖放代码,我正在从电子邮件(不是附件)中拖动图像,光标变化很好,但是当它被删除时出错

Unable to cast object of type 'System.IO.MemoryStream' to type 'System.Drawing.Imaging.Metafile[]'.

我究竟做错了什么?MetafilePict 是否使用了错误的数据格式?

Private Sub ImageViewer_DragDrop(ByVal sender As System.Object, _
                                 ByVal e As System.Windows.Forms.DragEventArgs) _
                             Handles MyBase.DragDrop

    If (e.Data.GetDataPresent(DataFormats.MetafilePict, False)) Then
        Try
            For Each path As Metafile In CType(e.Data.GetData(DataFormats.MetafilePict), Metafile())
                'Do stuff with data
            Next
        Catch ex As Exception
            MessageBox.Show("Error Doing Drag/Drop")
        End Try
    End If
End Sub

Private Sub ImageViewer_DragEnter(ByVal sender As System.Object, ByVal _
                                  e As System.Windows.Forms.DragEventArgs) _
                              Handles MyBase.DragEnter
    If (e.Data.GetDataPresent(DataFormats.MetafilePict, True)) Then
        e.Effect = DragDropEffects.Copy
    End If
End Sub
4

1 回答 1

0

好的回答我自己的问题。经过大量的探索后,我发现这适用于将图像从 Outlook 拖动到 vb.net。由于您无法从 Outlook 中拖动多个图像,因此我可以摆脱 For Each 循环。

代替:

If (e.Data.GetDataPresent(DataFormats.MetafilePict, False)) Then
    Try
        For Each path As Metafile In CType(e.Data.GetData(DataFormats.MetafilePict), Metafile())
            'Do stuff with data
        Next

和:

If (e.Data.GetDataPresent(DataFormats.MetafilePict, False)) Then
        Try
            Dim img As Image = DirectCast(e.Data.GetData(DataFormats.Bitmap, True), Image)
            'Do stuff with data
于 2013-05-23T20:40:57.607 回答