SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Windowsフォームアプリケーションにドラッグ&ドロップ機能を実装する

わずかな手間でユーザビリティがぐっと向上

特別なコントロールにドラッグ&ドロップを実装

 ほとんどのWindows Formsコントロールは、この記事で説明したドラッグ&ドロップ操作のためのイベント一式(またはその一部)をサポートします。しかし、ドラッグ&ドロップを可能にしたいコントロールが、標準的なイベントをサポートしていない場合はどうすればよいでしょうか。良い例がWindows Media Player ActiveXコントロールです。WindowsアプリケーションにWindows Media Playerコントロールを埋め込めばユーザーがメディアファイルをドラッグ&ドロップしただけで再生できるようになると思うかもしれませんが、残念ながら、Windows Media Player ActiveXコントロールはDragEnterDragDropのようなイベントをサポートしていません。従って、直接ドラッグ&ドロップを実装する簡単な方法はありません。

 この問題に対処するには、ユーザーコントロールを使用してActiveXコントロールをラッピングします。そのためには、現在のプロジェクトにユーザーコントロールを新たに追加します(ソリューションエクスプローラでプロジェクト名を右クリックして[Add]→[New Item]を選択して、[User Control]を選択)。そのファイルに「MediaPlayer.vb」という名前を付けます。

 ツールボックスにWindows Media Playerを追加します。そのためには、ツールボックスを右クリックして、[Choose Items]を選択します。[Choose Toolbox Items]ダイアログボックスで、[COM Components]タブをクリックして、[Windows Media Player]のチェックボックスをオンにします(図10を参照)。[OK]をクリックすると、ツールボックスにWindows Media Playerコントロールが追加されます。

図10 ツールボックスにWindows Media Player ActiveXコントロールを追加
図10 ツールボックスにWindows Media Player ActiveXコントロールを追加

 ツールボックスからWindows Media Playerコントロールをドラッグして、MediaPlayer.vbのデザイン画面上にドロップします(図11を参照)。

図11 ユーザーコントロールにWindows Media Playerコントロールを配置
図11 ユーザーコントロールにWindows Media Playerコントロールを配置

 これで、MediaPlayerユーザーコントロールがツールボックスに表示されるはずです(図12を参照)。

図12 MediaPlayerユーザーコントロール
図12 MediaPlayerユーザーコントロール

 Form1MediaPlayerユーザーコントロールをドラッグ&ドロップします(図13を参照)。

図13 Form1にMediaPlayerコントロールを追加
図13 Form1にMediaPlayerコントロールを追加

 MediaPlayer.vbのコードビューで、次のコードを追加します。

Public Class MediaPlayer
Private _URL As String
  Public Property URL() As String
     Get
        Return _URL
     End Get
     Set(ByVal value As String)
        _URL = value
        AxWindowsMediaPlayer1. _
           URL = _URL
     End Set
  End Property
End Class

 原則的に、再生するメディアファイルのURLはユーザーに設定させるため、URLプロパティを公開します。

 Form1のコードビハインド(分離コード)に移って、MediaPlayerユーザーコントロールのDragEnterイベントに次のようなコードを記述します。

Private Sub MediaPlayer1_DragEnter( _
  ByVal sender As Object, _
  ByVal e As System.Windows.Forms.DragEventArgs) _
  Handles MediaPlayer1.DragEnter
  '---if the data to be dropped is
  ' an filedrop format---
  If (e.Data.GetDataPresent( _
     DataFormats.FileDrop)) Then
     '---determine if this is a copy or move---
     If (e.KeyState And CtrlMask) = CtrlMask Then
        e.Effect = DragDropEffects.Copy
     Else
        e.Effect = DragDropEffects.Move
     End If
  End If
End Sub

 最後に、ユーザーがドロップしたメディアファイルを再生するためのコードをDragDropイベントに記述します。

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

  If (e.Data.GetDataPresent( _
     DataFormats.FileDrop)) Then
     Dim files() As String
     '---get all the file names---
     files = e.Data.GetData( _
        DataFormats.FileDrop)
     If files.Length > 0 Then
        '---load only the first file---
        files(0) = UCase(files(0))
        If files(0).EndsWith(."WMV") Then
           '---get the media player to play the
           ' first file---
           MediaPlayer1.URL = files(0)
        End If
     End If
  End If
End Sub
編集部注
 Form1のロード時にMediaPlayer1のAllowDropプロパティの値もTrueにしておく必要があります。手順は、TextBox1やPictureBox1、2と同様です。

 このコントロールには複数のファイルをドロップできるので、MediaPlayerコントロールでは最初のファイルだけをロードする点に注意してください。

 図14は、Windowsフォームの中にあるMediaPlayerコントロールが、ドロップされたファイルを再生しているところを示しています。

図14 Form1にメディアファイルをドラッグ&ドロップした結果
図14 Form1にメディアファイルをドラッグ&ドロップした結果

次のページ
カスタムオブジェクトのドラッグ&ドロップ

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Wei-Meng Lee(Wei-Meng Lee)

Microsoft MVP受賞者。Microsoft社の最新テクノロジー実地研修を専門とするDeveloper Learning Solutions社を創設。.NETとワイヤレステクノロジーの開発者、指導者として知られる。国際的なカンファレンスでたびたび講演し、.NET、XML、ワイヤレステクノロジーに関す...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2653 2008/07/18 10:02

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー