C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 117 を表示中)
■68657 / )  Re[1]: PictureBoxをクリックすると画像が消えてしまいます
□投稿者/ Azulean (234回)-(2013/11/04(Mon) 19:09:01)
No68656 (C#初心者 さん) に返信
> しかし、現在画像が表示されているPictureBox内にイメージをドロップ(シングルクリック)すると
> 画像が消えるという意図しない動作をしており、この原因がわからず苦慮しております。

たとえば、PictureBox1 からドラッグして、PictureBox1 にドロップしたとしましょう。
その場合、MouseDown の DoDragDrop によってドラッグが開始されますが、この時点では pictureBox1.Image = null; は実行されていません。
そして、ドロップすることによって pictureBox1_DragDrop が発生して、pictureBox1.Image に img が代入されます。
そして、DoDragDrop で一旦止まっていた処理が再開され、pictureBox1.Image = null; の行が実行されているのでしょう。

ドラッグ&ドロップの場合、ブレークポイントだと都合が悪いので、トレースポイントという機能を使うと、どういう流れをたどっているかがわかります。
http://www.atmarkit.co.jp/fdotnet/dotnettips/787tracepoint/tracepoint.html
あるいは、Debug.WriteLine とか入れておくと、どこを通ったかがわかるようにできます。


さて、解決策ですが、結構めんどくさいかもしれません。
要するに自分から自分へのドラッグ&ドロップを検知できないといけないので、それができる情報を一緒に渡すか、フラグで管理するかが必要です。
データを一緒に渡すなら IDataObject についての理解を深めてください。フラグで管理するならメンバー変数としてどこからドラッグ開始したか判別できるようにしてください。
あるいは、DoDragDrop 後の pictureBox1.Image = null; をなくしてコピーにしてしまうかですね。
返信 編集キー/


管理者用

- Child Tree -