クリックしたボタンの位置にフォームを表示したいとする。
正しくはこちら。ボタンの位置もClientRectangleを使ってボタン内での座標位置(つまりボタンの左上なので0,0)を使う。
で、表示してみたのが下記の図だが、なぜか少しずれている(横に5ピクセルほど)。なぜかしら?
ボタンのLocationはクライアント座標なので、スクリーン座標に計算して表示すればよい。このとき間違いやすいのが、フォームのPointToScreenメソッドを呼んでしまうこと。ボタンのメソッドを呼ばないといけない。
下記のコードは、ボタンの位置にフォームを表示しようとしているが、フォームのPointToScreenを呼んでいるので、フォームは意図した位置とずれて表示されてしまう。
下記のコードは、ボタンの位置にフォームを表示しようとしているが、フォームのPointToScreenを呼んでいるので、フォームは意図した位置とずれて表示されてしまう。
private void button4_Click(object sender, EventArgs e)
{
Button bt = sender as Button;
Form2 fm = new Form2();
fm.StartPosition = FormStartPosition.Manual;
fm.Location = PointToScreen(bt.Location);
fm.Show();
}
正しくはこちら。ボタンの位置もClientRectangleを使ってボタン内での座標位置(つまりボタンの左上なので0,0)を使う。
private void button5_Click(object sender, EventArgs e)
{
Button bt = sender as Button;
Form2 fm = new Form2();
fm.StartPosition = FormStartPosition.Manual;
fm.Location = bt.PointToScreen(bt.ClientRectangle.Location);
fm.Show();
}
で、表示してみたのが下記の図だが、なぜか少しずれている(横に5ピクセルほど)。なぜかしら?

コメント
コメントを投稿