- 締切済み
[VB] ブラウザからの D&D について
こんにちは。VisualBasic2008で画像を扱うWindowsアプリケーションを開発しているのですが、 IE や FireFox などのブラウザでWebページなどを表示した際、 そのWebページに含まれる画像をフォームにドラッグ&ドロップすることによって 取得することがうまくいきません。 'Me.AllowDrop=True 'PictureAdd(Image as Bitmap) は画像を追加するものです。 Private Sub Form1_DragEnter(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter If e.Data.GetDataPresent(GetType(Bitmap)) Then e.Effect = DragDropEffects.Copy End If End Sub Private Sub Form1_DragDrop(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop, Panel1.DragDrop Try PictureAdd(e.Data.GetData(GetType(Bitmap))) Catch ex As Exception MessageShow("エラー: " & ex.Message) End Try End Sub
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
完全な回答ではありません。アドバイスというよりも参考意見として。 画像をドラッグ&ドロップしたときに、インターネット一時ファイルとして保存された画像ファイルのパスであれば取得できました。(IEのみ、FireFoxは未検証) Private Sub Form1_DragEnter(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.DragEventArgs) Handles If e.Data.GetDataPresent("FileName") Then e.Effect = DragDropEffects.Copy End If End Sub Private Sub Form1_DragDrop(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.DragEventArgs) Handles If e.Data.GetDataPresent("FileName") Then Dim strFileName As String() = CType(e.Data.GetData("FileName"), String()) Dim bmpLoad As New Bitmap(strFileName(0)) PictureBox1.Image = bmpLoad End If End Sub ただ、リンクが張られている画像などではうまく取れません。 DragEnterイベント内で For Each strEnum As String In e.Data.GetFormats() Call Console.WriteLine(strEnum & vbCrLf) Next このようにすれば、取得可能なフォーマット一覧が取得できます。ドラッグするものによって結構内容が違いました。 他のアプリがどんな挙動をしているかと思い、いろんなものにドラッグしてみました。 リンクなしの画像であれば、ペイントやPhotoshopなどにドラッグ可能ですが、やはりファイルから開いていますね。 リンク付の画像はペイント、Photoshopでは無反応、Workではリンク先のURLしか出てきませんでした。 参考になれば。
お礼
ありがとうございます。 ブラウザからのドラッグ&ドロップがこんなに大変だということを知ってびっくりしました。