C#_クリックした座標を取得

e.Location
PointToClient ( Control.MousePosition )  とほぼ同じ値。

PointToClient(e.Location) は 違う。ハマった。

e.Location フォームの左上を原点とした、
マウスの X 座標・ Y 座標が格納。
クリックし、
スクロール後に同じ位置でクリックした場合、
スクロール分を加味した座標が得られる。
( フォームの左上隅に対して相対的に、x と y マウス座標を格納 )

 

【前提】
panel 設置。
panel に pictureBox 設置。
panel の AutoScroll は TRUE。
pictureBox の SizeMode は AutoSize。

 

ソース
マウスを pictuerBox 上でクリック時、
その座標を取得し Points.txt に書き込んでいく。

private void pictureBox_MouseClick(object sender, MouseEventArgs e)
{
    Point getXY = e.Location;

    try
    {
        //座標をファイル末尾に追加
        using (StreamWriter sw = new StreamWriter(@".\Points.txt", true))
        {
            sw.WriteLine( (getXY.X).ToString() + "," + (getXY.Y).ToString() );
            sw.Close();    //いらない?
        }
    }
    catch (Exception error)
    {
        MessageBox.Show(error.ToString());
    }
}

アクセスするファイルが既に開かれていたりなど、
例外が発生するので catch

 

こちらから。
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.mouseeventargs.location(v=vs.110).aspx
https://ja.stackoverflow.com/questions/36003/%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%90%E3%83%BC%E4%BB%98%E3%81%8D%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E9%A0%98%E5%9F%9F%E3%81%AE%E3%83%9E%E3%82%A6%E3%82%B9%E5%BA%A7%E6%A8%99%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF

 

以上。

-- Memo --
パネルのスクロールバー位置取得
Point varPosition = panel.AutoScrollPosition;
int getH = varPosition.X * -1;
int getV = varPosition.Y * -1;

int X = panel.HorizontalScroll.Value;
int Y = panel.VerticalScroll.Value;

getH == X