DOBON.NETプログラミング道掲示板
(現在 過去ログ3 を表示中)
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[
最新記事及び返信フォームをトピックトップへ
]
[ トピック内全3記事(1-3 表示) ] <<
0
>>
■34265
/ inTopicNo.1)
MouseEventArgsのカレント座標
▼
■
□投稿者/ あばば無人君
一般人(4回)-(2019/05/27(Mon) 14:38:23)
環境/言語:[Win10Pro(Ver1809)、C#(.Net4.7.1)]
分類:[.NET]
現在、Win10Pro(Ver1809)+C#(.Net4.7.1)の環境でタイトルバーの無い
フォームアプリケーション※を作成しております。
※FormのプロパティFormBorderStyle=None
ただ、このアプリは移動はさせたいとの事なのでMouseDown/MouseMove/MouseUpの
イベントを設定して以下の実装をしております。
(マウスでフォームをドラッグして移動できる実装)
private bool IsFormMoveStart = false;
private Point MouseLocation;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
Debug.WriteLine("マウスダウンイベント発生!:" + e.Button + e.Location);
IsFormMoveStart = true;
MouseLocation = e.Location;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (IsFormMoveStart)
{
Debug.WriteLine("マウスムーブイベント発生!:" + e.Button + e.Location);
/// マウスの移動距離(ピクセル?)を求める
int moveX = e.Location.X - MouseLocation.X;
int moveY = e.Location.Y - MouseLocation.Y;
/// マウスの移動距離分だけ当EXEフォームも移動させる
this.Location = new Point(this.Location.X + moveX,
this.Location.Y + moveY);
// MouseLocation = e.Location; ★
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
Debug.WriteLine("マウスアップイベント発生!:" + e.Button + e.Location);
IsFormMoveStart = false;
}
質問はこのフォームを実際にマウスで移動した時の以下ログのX座標の値です。
マウスダウンイベント発生!:Left{X=200,Y=100} -@
マウスムーブイベント発生!:Left{X=200,Y=100} -A
マウスムーブイベント発生!:Left{X=201,Y=100} -B
マウスムーブイベント発生!:Left{X=200,Y=100} -C
マウスアップイベント発生!:Left{X=200,Y=100} -D
@A行目はフォームをマウスで押下(指は解放していない)した時の物で、
X座標はその時点の値が出力されていて問題は無い認識です。
次に右へ1ピクセル動かしたログがBCなのですが、Bで200 → 201 となったのに
Cで200に戻っています。
また、指を開放した時のDも同様です。
最初は私の操作がおかしいのかと思いましたが、何度やってもフォームは確実に
1ピクセル動いていますし、また他の人間に操作させても同じ結果でした。
CDで1ピクセル小さい値がイベントとして上がってくる原因が分かる方は
いらっしゃいますでしょうか?
引用返信
削除キー/
編集
削除
■34266
/ inTopicNo.2)
Re[1]: MouseEventArgsのカレント座標
▲
▼
■
□投稿者/ Hongliang
大御所(561回)-(2019/05/27(Mon) 15:32:22)
2019/05/27(Mon) 15:45:02 編集(投稿者)
e.Locationは、senderであるコントロールの左上を (0, 0) とするクライアント座標系で表されています。
マウスを右に1ピクセル動かすと、フォームがそれに続いて右に1ピクセル移動されるため、結局クライアント座標系におけるマウスカーソル位置は元に戻ることになります。
追記。
マウスが動いていなくても、フォームの方が移動した時、MouseMoveイベントが発生します。
引用返信
削除キー/
編集
削除
■34267
/ inTopicNo.3)
Re[2]: MouseEventArgsのカレント座標
▲
▼
■
□投稿者/ あばば無人君
一般人(6回)-(2019/05/27(Mon) 16:11:24)
■
No34266
に返信(Hongliangさんの記事)
> 2019/05/27(Mon) 15:45:02 編集(投稿者)
> e.Locationは、senderであるコントロールの左上を (0, 0) とするクライアント座標系で表されています。
> マウスを右に1ピクセル動かすと、フォームがそれに続いて右に1ピクセル移動されるため、結局クライアント座標系におけるマウスカーソル位置は元に戻ることになります。
Oh!その通りですね。
しょぼいレベルの質問にお答えして頂き本当にありがとうございました。
> 追記。
> マウスが動いていなくても、フォームの方が移動した時、MouseMoveイベントが発生します。
ご丁寧にありがとうございました。
本件、解決済みとさせて頂きます。
解決
済
み!
引用返信
削除キー/
編集
削除
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-