投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/9/10 06:21:37
> 他のアプリ(たとえばワードパッド)にMoveしようといたしますと、
> 勝手にCopyになってしまう点です。

それはワードパッド側の仕様です。

他のアプリへのドロップ時の動作は、VB からは制御できません。
VB から指定できるのは、DoDragDrop の引数である データ(data As Object)と、
使用可能な動作(allowedEffects As DragDropEffects)のみです。


ワードパッドの場合、ドラッグ元とドロップ先が、それぞれ同一アプリ上の内であれば、
「そのままでは Move」「Ctrl 押下で Copy」という動作モードになるのですが、
ワードパッドを 2 つ起動して、その間で文字列をドラッグしようとした場合、
「そのままでは Copy」「Alt 押下で Move」という動作になっています。

そして、VB からドロップした場合というのは、後者の状態にあたりますから、
Alt を押さない限りは、Move 扱いにならないのです。

ただしこれは、DoDragDrop に渡す DragDropEffects を
'コピーと移動を許可する  
Dim effect As DragDropEffects
effect = DragDropEffects.Copy Or DragDropEffects.Move
にしていた場合の話です。

Move のみを指定した場合には、ワードパッドは「常に Move」として処理されますし、
Copy のみを指定した場合には、ワードパッドは「常に Copy」として処理されます。

これはドロップ先は、allowedEffects で許可されている動作モードのみが
利用可能であるからです。(allowedEffects を無視するアプリもありますが…)


# DragDropEffects には、他にも Scroll や Link など幾つかのモードがありますが、
# それらをドロップ先のアプリがどのように処理するかは、ドロップ先が決める事であって、
# ドラッグ元である VB 側は一切関与する必要がありませんし、関与すべきではありません。