2013年3月13日水曜日

(C#, VB.NET)スクリーン座標(画面座標)をコントロールから見たクライアント座標に変換

スクリーン座標(画面座標)をコントロールから見たクライアント座標に変換する方法です。

以下は、マウスカーソル座標を取得しフォームのクライアント座標に変換するサンプルです。
■C#
Point p = this.PointToClient(Cursor.Position);
int x = p.X;
int y = p.Y;

■VB.NET
Dim p As Point = Me.PointToClient(Cursor.Position)
Dim x As Integer = p.X
Dim y As Integer = p.Y

xには横軸、yには縦軸の値が入ります。コントロール左上が(0, 0)で基準となり、右はx加算、左はx減算、下はy加算、上はy減算となります。

RightToLeft のアプリケーションではxが逆になるらしいですが、試したらフォームのクライアント座標のみ逆になりました。通常 RightToLeft を使う場面はほとんどないでしょう。

他に、画面座標をコントロール上の座標をスクリーン座標(画面座標)に変換する PointToScreen メソッドがあります。

■環境
OS:Microsoft Windows XP Home Edition 日本語 Service Pack 3
IDE:Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1
Framework:Microsoft .NET Framework Version 2.0 SP2

■関連投稿
(C#, VB.NET)コントロールのスクリーン座標(画面座標)取得
(C#, VB.NET)スクリーン座標(画面座標)をコントロールから見たクライアント座標に変換