マウスカーソルの座標は「スクリーン座標」、「クライアント座標」があります。
- スクリーン座標
ディスプレイの左上を原点とした座標。 - クライアント座標
フォームのコントロールを配置できる左上を原点にした座標。
とりあえず、フォームに大き目のラベルを張りました。
そのラベルのMouseDownイベントでマウスカーソルの座標を取得してみます。
スクリーン座標
スクリーン座標はCursor.Positionで取得できます。
コードはこんな感じです。
namespace xxx { public partial class test : Form { public test() { InitializeComponent(); } private void label1_MouseDown(object sender, MouseEventArgs e) { Point spoint = Cursor.Position; } } }
spoint .X、spoint .Yで座標を参照できます。
クライアント座標
スクリーン座標をクライアント座標に変換します。
namespace xxx { public partial class test : Form { public test() { InitializeComponent(); } private void label1_MouseDown(object sender, MouseEventArgs e) { Point spoint = Cursor.Position; Point cpoint = PointToClient(spoint); } } }
Cursor.Positionで得た座標をPointToClientでクライアント座標を取得します。
cpoint.X、cpoint .Yでクライアント座標を参照できます。
おまけ
クライアント座標は、MouseEventArgsのe.X, e.Yでも取得できます。
これを使ってコントロールの左上を起点にした座標を取得できます。
namespace xxx { public partial class test : Form { public test() { InitializeComponent(); } private void label1_MouseDown(object sender, MouseEventArgs e) { Point spoint = Cursor.Position; Point cpoint = PointToClient(spoint); MessageBox.Show("スクリーン座標 X=" + spoint.X.ToString() + " Y=" + spoint.Y.ToString() + Environment.NewLine + "クライアント座標 X=" + cpoint.X.ToString() + " Y=" + cpoint.Y.ToString() + Environment.NewLine + "コントロール座標 X=" + e.X.ToString() + " Y=" + e.Y.ToString()); } } }
スクリーン座標、クライアント座標とlabel1の左上を起点にした座標を取得して表示するコードです。
コメント