DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

画面座標をクライアント座標(コントロール上の座標)に変換する

ここでは、画面上の座標(画面座標、スクリーン座標)をコントロール上の座標(クライアント座標)に変換する方法と、クライアント座標を画面座標に変換する方法を紹介します。

「画面座標」と「クライアント座標」とは?

まず画面座標とクライアント座標について説明します。

「画面座標」というのは、画面上の座標です。画面の左上を原点 (0, 0) とし、X座標は右に行くほど大きくなり、Y座標は下に行くほど大きくなります。

例えば、フォームの位置を表すForm.Locationプロパティは、画面座標を返します。

「クライアント座標」というのは、フォームやコントロールのクライアント領域上での座標です。こちらも、クライアントの左上を原点 (0, 0) とし、X座標は右に行くほど大きくなり、Y座標は下に行くほど大きくなります。

例えば、フォームに配置されたコントロールの位置を表すControl.Locationプロパティは、クライアント座標を返します。

下の図では、フォームに配置されたコントロール「Button1」の位置を表す画面座標と、フォーム上でのクライアント座標が具体的にどのようなものであるかを説明しています。

画面座標とクライアント座標

画面座標をクライアント座標に、クライアント座標を画面座標に変換する

画面座標をフォームやコントロール上のクライアント座標に変換するには、そのフォームやコントロールのControl.PointToClientメソッドを呼び出します。逆に、フォームやコントロール上のクライアント座標を画面座標に変換するには、そのフォームやコントロールのControl.PointToScreenメソッドを呼び出します。

VB.NET
コードを隠すコードを選択
'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))
C#
コードを隠すコードを選択
//using System.Drawing;

//このコードがフォームクラス内に書かれており、
// thisが自分自身のフォームを表しているものとする。

//画面座標(100, 200)を、フォーム上のクライアント座標に変換する
Point cp = this.PointToClient(new Point(100, 200));

//フォーム上のクライアント座標(10, 20)を、画面座標に変換する
Point sp = this.PointToScreen(new Point(10, 20));

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。