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

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

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

Re[4]: PictureBoxでDrag中の表示について


(過去ログ 130 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■77193 / inTopicNo.1)  PictureBoxでDrag中の表示について
  
□投稿者/ 不変の悩み (3回)-(2015/09/21(Mon) 07:23:14)

分類:[C#] 

C# VisualStdio 4.0 Win 7以降

PictureBoxの派生クラスでマウスイベントでドラッグ&ドロップの開始処理を行っています。
DoDragDropイベント中にマウスポインタ付近に画像を表示させたいのですがうまくいきません。
このような場合はどうすればよいのでしょうか。

        protected override void OnMouseDown(MouseEventArgs e)
        {
            DoDragDrop(this, DragDropEffects.All);
        }

        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);

            this.BringToFront();
            this.Left += e.X - this.Width / 2;
            this.Top += e.Y - this.Height / 2;
        }

引用返信 編集キー/
■77194 / inTopicNo.2)  Re[1]: PictureBoxでDrag中の表示について
□投稿者/ Azulean (520回)-(2015/09/21(Mon) 09:40:00)
いくつかポイントがあります。

・DoDragDrop の場合、通常の MouseMove は発生しません。
AllowDrop を true に設定の上、DragOver イベントをうまくやれば近づきますが、キャンセル(Esc キーや右クリック)したときもその場に残る、コピーなどのカーソルの表示など、不自然な実装になります。
 この方法の場合、座標はスクリーン座標になるので、PointToClient を使ってコントロール座標に変換する必要がありそうです。
 あとは何も工夫しないと、他のアプリからのドロップも受け付けてしまう不具合になります。
・アプリ内のドラッグ&ドロップであれば、無理に DoDragDrop を使う必要はありません。
MouseDown でフィールド変数(いわゆるフラグ)を設定し、MouseUp で解除し、MouseMove は設定されている間うごくといった具合です。
・DoDragDrop を使い続ける場合、コントロールを動かすのではなく、カーソルを設定するという手も考えられます。
http://dobon.net/vb/dotnet/control/draganddrop.html

引用返信 編集キー/
■77195 / inTopicNo.3)  Re[2]: PictureBoxでDrag中の表示について
□投稿者/ 不変の悩み (4回)-(2015/09/21(Mon) 11:43:22)
ありがとうございます。Mouseイベントのほうで解決できそうです。
余談なのですが、今はフォーム上にあるすべてのコントロールをControl.ClientRectangle.Containsでチェックしていますが、
直接マウスポインタ下のコントロールをチェックできる方法はないのでしょうか。(ドラッグしているコントロールを除く)
引用返信 編集キー/
■77197 / inTopicNo.4)  Re[3]: PictureBoxでDrag中の表示について
□投稿者/ Azulean (521回)-(2015/09/21(Mon) 20:51:18)
No77195 (不変の悩み さん) に返信
> 余談なのですが、今はフォーム上にあるすべてのコントロールをControl.ClientRectangle.Containsでチェックしていますが、
> 直接マウスポインタ下のコントロールをチェックできる方法はないのでしょうか。(ドラッグしているコントロールを除く)

マウスポインター直下のコントロールを得る方法はありますが、ドラッグしているコントロールがそれに当たるケースがほとんどではないでしょうか。
そうだとすると、言われているように地道に探すしかありません。
引用返信 編集キー/
■77198 / inTopicNo.5)  Re[4]: PictureBoxでDrag中の表示について
□投稿者/ 不変の悩み (5回)-(2015/09/21(Mon) 22:11:09)

> マウスポインター直下のコントロールを得る方法はありますが、ドラッグしているコントロールがそれに当たるケースがほとんどではないでしょうか。
> そうだとすると、言われているように地道に探すしかありません

うむむ、やはりそうですか。回答ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -