ボタンと同じ位置にフォームを表示したいのに
クリックしたボタンの位置にフォームを表示したいとする。
正しくはこちら。ボタンの位置も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ピクセルほど)。なぜかしら?
コメント
コメントを投稿