Visual Basic 2005(以下VB2005)が出てから約一年が立ちました。既にご利用の方も多いと思います。今回は以前に紹介した、VB6用の連続画像印刷プログラムに近いものを作ってみます。印刷の機能までつけると紙面に入りきらないために、
アイコンのドラッグ&ドロップでファイル名を取得し、
そのファイル名とサイズをListBoxに表示する
ものを考えます。
ドラッグ&ドロップで使用するイベント処理
まず最初に、図1 のようにフォーム上にListBoxを置いてください。ListBoxのオブジェクト名はListBox1のままでOKです。
図1
ここで、最初にひとつだけプロパティを設定する必要があります。図2 のように、ListBox1の「AllowDropプロパティ 」をTrueに変更しておいてください。これでドラッグ&ドロップ動作が可能になります。次に、ドラッグ&ドロップによってファイル名を取り込むために、ListBox1に対する2つのイベント処理を記述します。
図2
DragEnter は、コントロールの領域(この場合はListBox1)にドラッグされたものが入った(かざされた)ときに生じるイベントです。この記述により、ドラッグ&ドロップできるオブジェクトが領域に入ったかを確認し、それが目的のオブジェクトであればコピー動作を行い、そうでない場合は何もしません。
DragDrop は、DragEnterされたオブジェクトがコントロールの領域内でドロップされた(ボタンが離された)場合に生じるイベントです。実際にドロップ後に、何がドロップされ、それに対する処理を具体的に記述します。
実はこれ以外に、ItemDrop というイベントがあります。これは、VB内にあるドラッグ元から何らかのコントロールがドラッグされたときに生じるものですが、今回は外部アプリケーション上で発生しているので、今回は記述はありません。
ListBoxにドラッグされる直前の処理
図3 を見てください。アイコンが、ListBoxにかざされたときに生じるのがDragEnter です。まず24行目で、ListBox1にかざされたコントロールが、アイコンなのか、それ以外なのかを判断(GetDataPresentでFileDropかを判断)しています。そして、アイコンがドロップされたときだけ、ドロップターゲットにDragDropEffects列挙体のCopyメンバーを指定してデータコピーしています。
図3
ファイル名の表示とファイルサイズの取得
さて、実際にアイコンがドロップされた後ですが、これがDragDropの処理です。
ここでファイル名を取り込むために、先に2行目でファイル名のString配列を作成しています。ファイル名はここに入れることにします。7行目で取得したデータを、「 CType( ●, String())」として配列要素を取り込んでいます。●は取り込んだデータです。
そして、9~19行でFor Each ~ Nextでファイル名をすべて取り込んでいます。ファイル名として取り込んだものがディレクトリであるおそれがあるので(サイズを取得できない) 、例外エラーとして12~16行でTry ~ Catch ~ End Tryで、エラー処理しています。ファイルサイズが取得できない場合には「-----」を表示するようにしています。
プログラムの実行と応用
いよいよプログラムを実行してみましょう。プログラムを実行し、エクスプローラーからListBoxに複数のアイコンをドラッグ&ドロップしてみたところです(図4 ) 。ファイル名の位置を揃えるために、サイズとファイル名の間に「vbTab」を入れてあります(17行目) 。Logsはフォルダなので、先頭に「-----」が表示されているのが分かります。
図4
最後に
このプログラムの応用で複数のファイルなどのドラッグ&ドロップによる自動処理(ドロップレットと呼ばれる)を作ることができます。挑戦してみてください。