ここでは、画面上の座標(画面座標、スクリーン座標)をコントロール上の座標(クライアント座標)に変換する方法と、クライアント座標を画面座標に変換する方法を紹介します。
まず画面座標とクライアント座標について説明します。
「画面座標」というのは、画面上の座標です。画面の左上を原点 (0, 0) とし、X座標は右に行くほど大きくなり、Y座標は下に行くほど大きくなります。
例えば、フォームの位置を表すForm.Locationプロパティは、画面座標を返します。
「クライアント座標」というのは、フォームやコントロールのクライアント領域上での座標です。こちらも、クライアントの左上を原点 (0, 0) とし、X座標は右に行くほど大きくなり、Y座標は下に行くほど大きくなります。
例えば、フォームに配置されたコントロールの位置を表すControl.Locationプロパティは、クライアント座標を返します。
下の図では、フォームに配置されたコントロール「Button1」の位置を表す画面座標と、フォーム上でのクライアント座標が具体的にどのようなものであるかを説明しています。
画面座標をフォームやコントロール上のクライアント座標に変換するには、そのフォームやコントロールのControl.PointToClientメソッドを呼び出します。逆に、フォームやコントロール上のクライアント座標を画面座標に変換するには、そのフォームやコントロールのControl.PointToScreenメソッドを呼び出します。
'Imports System.Drawing 'このコードがフォームクラス内に書かれており、 ' Meが自分自身のフォームを表しているものとする。 '画面座標(100, 200)を、フォーム上のクライアント座標に変換する Dim cp As Point = Me.PointToClient(New Point(100, 200)) 'フォーム上のクライアント座標(10, 20)を、画面座標に変換する Dim sp As Point = Me.PointToScreen(New Point(10, 20))
//using System.Drawing; //このコードがフォームクラス内に書かれており、 // thisが自分自身のフォームを表しているものとする。 //画面座標(100, 200)を、フォーム上のクライアント座標に変換する Point cp = this.PointToClient(new Point(100, 200)); //フォーム上のクライアント座標(10, 20)を、画面座標に変換する Point sp = this.PointToScreen(new Point(10, 20));