Visual Basic でOpenCV⑦ - ドラッグ&ドロップ

Visual BasicOpenCVを使用しフィルタ処理を行います。フォームに画像ファイルをドラッグ& ドロップできる例を紹介します。

ドラッグ&ドロップ

フォームに画像ファイルをドラッグ& ドロップできる例を紹介します。以降に、動作例を示します。

実行例

ドラッグ
ドロップ

Form1.vb

読み込んだ画像を表示するフォームに対するコードが記述されているForm1.vb の、変更点を中心に示します。

    :
Public Class Form1
    :

    Public Sub New()
        MyBase.New
        InitializeComponent()

        :

        AllowDrop = True
        AddHandler DragEnter, AddressOf Form1_DragEnter
        AddHandler DragDrop, AddressOf Form1_DragDrop

        mForm2 = New Form2
    End Sub

    :

    'ドラッグエンター
    Private Sub Form1_DragEnter(sender As Object, e As DragEventArgs)
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            e.Effect = DragDropEffects.All
        Else
            e.Effect = DragDropEffects.None
        End If
    End Sub

    'ドロップ
    Private Sub Form1_DragDrop(sender As Object, e As DragEventArgs)
        Try
            Dim fname = CType(e.Data.GetData(DataFormats.FileDrop, False), String())
            OpenFile(fname(0))
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    :

画像ファイルのドラッグ&ドロップにも対応するため、それに対応するコードを追加します。まず、フォームにファイルなどのドロップを許可するため、AllowDrop プロパティをTrue に設定します。次に、フォームのDragEnter とDragDrop イベントに対応するメソッドを登録します。最後に、結果表示用のフォームForm2 オブジェクトmForm2 を生成します。
Form1_DragEnter メソッドは、何かをフォーム上にドラッグしたときに制御が渡ります。ドラッグされたものがファイルであれば受け取るようにマウス形状を変更します。
Form1_DragDrop メソッドは、フォームに何かをドロップしたときに制御が渡ります。複数の項目がドロップされても先頭の項目のみを使用し、OpenFile メソッドを呼び出して画像ファイルを読み込みます。画像以外のファイルをドロップするとエラーダイアログが現れます。