#05 TreeViewコントロール(ドラッグ&ドロップ)

エクスプローラではお馴染みのドラッグ&ドロップの機能を実装してみます。基本的にはTreeViewコントロールはその機能を持っているので、細々としたプログラムを書く必要はありませんが、ドラッグの開始やドロップ先の検出などのいくつかのコードはイベントプロシージャに記述する必要があります。

なお、掲載しているサンプルフォームでは、多階層のツリーデータまではプログラムやテーブル構造が考慮されていません。それについては、応用としてデータ構造やアルゴリズムを別途検討してみてください。


ポイント

OLEDragModeプロパティ
OLEドラッグモードを設定します。ドラッグ&ドロップを行なうためには、これに定数ccOLEDragAutomatic(自動モード)を代入します。なおこの設定は、プログラム上ではなく、TreeViewコントロールのプロパティシートからデザイン時に行なってもかまいません。

OLEDropModeプロパティ
OLEドロップモードを設定します。ドラッグ&ドロップを行なうためには、これに定数ccOLEDropManual(マニュアルモード)を代入します。なおこの設定は、プログラム上ではなく、TreeViewコントロールのプロパティシートからデザイン時に行なってもかまいません。

MouseDownイベント
TreeViewコントロールでマウスのボタンが押し下げられたときに発生します。ドラッグ&ドロップにおいては、ドラッグの開始時となります。ここで、選択されたNodeオブジェクトをフォーム内でPublicなNodeオブジェクト変数に代入します。それによってドロップ先にその情報を伝えることができます。

OLEDragOverイベント
マウスがドラッグ中に通過したときに発生します。ここでは通過中のノードのテキストをハイライト表示します。

OLEDragDropイベント
ドロップされたときに発生するイベントです。ドラッグ元のノードの情報がPublicなNodeオブジェクト変数に代入されていますので、そのノードの親ノードを、ドロップされたノード(正確には最後に通過したノード)に差し替えます。それによってノードが移動されます。


サンプルフォームの実行例

"バードワイン"をドラッグ開始


"加工食品"にドラッグしようとしているところ


ドラッグ完了!


さらに"バードワイン"の下に"清涼スカッシュ"をドラッグ&ドロップ(ただし本サンプルではこれは階層が多いため正しく保存されませんのでご注意!)



サンプルDBのダウンロード

comctl_05.lzh(comctl_05.mdb)

| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved