C#を始めよう|マウスカーソル座標取得

C#を始めよう|マウスカーソル座標取得

C#

マウスカーソルの座標は「スクリーン座標」、「クライアント座標」があります。

  • スクリーン座標
    ディスプレイの左上を原点とした座標。
  • クライアント座標
    フォームのコントロールを配置できる左上を原点にした座標。

フォームに大き目のラベルとりあえず、フォームに大き目のラベルを張りました。
そのラベルの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の左上を起点にした座標を取得して表示するコードです。

コメント

タイトルとURLをコピーしました