DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ドラッグ&ドロップについて

環境/言語:[環境:XP,使用言語:C#,.NET Framework2.0]
分類:[.NET]

C#でここを見て、→「http://dobon.net/vb/dotnet/control/droppedfile.html」
ドラッグ&ドロップを勉強し、実際に作ってみたのですが、
DragDropイベントの意味が良く分かりません。
プログラム作成時に、DragDropイベントだけしか必要だと思い、
DragDropイベントを追加し、プログラムを書いていたのですが、まったく反応せず。
画像をドラッグしてこようが、イベントは発生しませんでした。
AllowDropをtrueにしても反応しませんでした。
しかし、ホームページのようにDragEnterを追加するとDragDropイベントが動くようになりました。
これは何故なのでしょうか?
よろしくお願いします。
動きもあんまり分かりませんでしたし、インターネットで調べてもあまり良いものが見つからず・・・。
ちなみにドラッグしてくる箇所はpanelを使用しています。
2007/01/25(Thu) 18:53:43 編集(投稿者)

■No18924に返信(haruさんの記事)
イベントハンドラをイベントに結びつけていますか?
http://dobon.net/vb/dotnet/vb2cs/event.html
とかの内容なんですが。。。

http://uchukamen.com/CS2005/AnalogClock/index.htm
4 - 5. 辺りの操作をしてください。
>pictureBox1 のプロパティを表示し、稲妻ボタンをクリックします。
>この中で、Paint イベントをダブルクリックすると、picture1_Paint
>イベントが追加されます。


イベントハンドラのコードをコピペした後なら、イベントの横の
コンボボックスに関数名が表示されますのでそれから選んで
ください。

コード上では
this.ListBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.ListBox1_DragDrop);
this.ListBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.ListBox1_DragEnter);
が追加されます。
> ■No18924に返信(haruさんの記事)
> イベントハンドラをイベントに結びつけていますか?
> http://dobon.net/vb/dotnet/vb2cs/event.html
> とかの内容なんですが。。。
はい、結び付けています。

> http://uchukamen.com/CS2005/AnalogClock/index.htm
> 4 - 5. 辺りの操作をしてください。
> >pictureBox1 のプロパティを表示し、稲妻ボタンをクリックします。
> >この中で、Paint イベントをダブルクリックすると、picture1_Paint
> >イベントが追加されます。
はい、追加されています。

一応、質問としては、ドラッグ&ドロップをして、画像をpaintに貼り付ける処理に関して、なぜDragEnterが必要なのか?というのと、
いざ、DragDropイベントだけで動かそうとすると動かず、DragEnterが無いとDragDropが反応しないと云う事なのです。
質問が分かりづらくてスミマセン。
(私が理解出来ていないだけかもしれませんので、またよろしくお願いします)
■No19021に返信(haruさんの記事)

> 一応、質問としては、ドラッグ&ドロップをして、画像をpaintに貼り付ける処理に関して、なぜDragEnterが必要なのか?というの

そういうものだから、です。

> いざ、DragDropイベントだけで動かそうとすると動かず、DragEnterが無いとDragDropが反応しない

そういうものだから、です。part2!

…と、コレだけで終わってしまうとあんまりなので。
オブジェクトをコントロールにドラッグすると、Control.DragEnter イベントが最初に起動します。
その DragEnter イベントの DragEventArgs には Effect というプロパティがあります。
DragEnter イベントに渡されるパラメータ e の Effect は DragDropEffects.None が既定値なの
で、そのままではドラッグ&ドロップを受け付けないようになっています。
そこで、DragEnter イベントで e.Effect を書き換えることによってドロップできるようにしてあげ
る必要があります。
一般的には、例えばファイルをドロップしたいのであれば DragEnter イベントでドラッグされた
ものがファイルなのかどうかを判断して、それで e.Effect プロパティを書き換えるといった方
法を取ります(目的のものでなければ None にしておけばドロップできない)。

と、ここまで書いて最初のリンク先(どぼん!さんの説明)に全て書いてあったことに気がつき
ました orz
やっと、理解出来ました。
ありがとうございました。
>と、ここまで書いて最初のリンク先(どぼん!さんの説明)に全て書いてあったことに気がつきました orz
しっかりと読んで勉強します。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板