マウスカーソルの座標は「スクリーン座標」、「クライアント座標」があります。
- スクリーン座標
ディスプレイの左上を原点とした座標。 - クライアント座標
フォームのコントロールを配置できる左上を原点にした座標。
とりあえず、フォームに大き目のラベルを張りました。
そのラベルの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の左上を起点にした座標を取得して表示するコードです。


コメント