C#のPointとは?座標の使い方からSystem.DrawingとSystem.Windowsの違いまで初心者向けに解説
はじめに
C#で画面上の位置、マウスの座標、図形の描画位置などを扱うときによく登場するのがPointです。csharp pointと検索している方の多くは、「Pointとは何か」「XとYは何を表すのか」「System.Drawing.PointとSystem.Windows.Pointは何が違うのか」でつまずきやすいはずです。
C#のPointは、簡単にいうと「2次元上の1点」を表すための型です。ただし、C#には用途の異なるPointが複数あります。Windows Formsでよく使うSystem.Drawing.Point、WPFで使うSystem.Windows.Point、小数座標を扱えるPointFなどがあり、使う画面技術によって選び方が変わります。
この記事では、C#初心者向けにPointの基本、座標の考え方、System.Drawing.PointとSystem.Windows.Pointの違い、よくあるエラー、実践的な使い方まで順番に解説します。
1. C#のPointとは?座標を表す基本構造を初心者向けに解説
C#のPointとは、画面や図形上の「位置」を表すために使う型です。たとえば、画面の左上から横に50、縦に100の場所を表したい場合、Pointを使って(50, 100)のように表現できます。
C#には複数のPointがありますが、基本的な考え方は共通しています。どのPointも、横方向を表すXと縦方向を表すYを持ち、「どこにあるか」を示すために使います。
1-1. Pointは「X座標」と「Y座標」を持つ2次元上の点
Pointは、2次元空間にある1つの点を表します。System.Drawing.Pointは、整数のX座標とY座標の組み合わせで2次元平面上の点を表す構造体です。Microsoft Learn
C#Point point = new Point(100, 50);
この例では、Xが100、Yが50です。
Xは横方向、Yは縦方向を表します。画面上の位置であれば、「左から100、上から50の位置」と考えると分かりやすいです。
1-2. C#でPointが使われる主な場面
C#でPointが使われる場面は多くあります。代表的なのは、Windows Formsでボタンやラベルなどのコントロールの位置を指定するとき、マウスクリックの位置を取得するとき、線や図形を描画するとき、画像上の特定の位置を扱うときなどです。
たとえば、Windows FormsではコントロールのLocationプロパティにPointを設定して、画面上の配置場所を決めます。
C#button.Location = new Point(30, 20);
このコードでは、ボタンをフォームの左上から横に30、縦に20の位置へ配置します。
1-3. Pointはクラスではなく構造体として扱われることが多い
C#のPointは、クラスではなく構造体として定義されていることが多いです。System.Drawing.PointもSystem.Windows.Pointも構造体です。System.Windows.Pointも2次元空間のX座標とY座標の組を表す構造体として定義されています。Microsoft Learn
構造体は値型です。そのため、変数に代入すると基本的には値がコピーされます。
C#Point p1 = new Point(10, 20);
Point p2 = p1;
p2.X = 100;
Console.WriteLine(p1.X); // 10
Console.WriteLine(p2.X); // 100
この例では、p2を変更してもp1の値は変わりません。これはPointが値としてコピーされるためです。
1-4. Pointと座標・位置・サイズの関係
Pointは「位置」を表します。一方で、幅や高さのような「大きさ」を表す場合はSizeを使います。また、位置と大きさをまとめて「範囲」として扱いたい場合はRectangleを使います。
たとえば、次のように考えると整理しやすいです。
C#Point location = new Point(10, 20); // 位置
Size size = new Size(100, 50); // 大きさ
Rectangle rect = new Rectangle(location, size); // 位置 + 大きさ
Pointは「どこから始まるか」、Sizeは「どれくらいの大きさか」、Rectangleは「どの範囲か」を表す型です。
2. C#でPointを使う前に知っておきたい座標の基本
Pointを理解するには、まず座標の考え方を押さえる必要があります。特に、数学で使う座標と画面上の座標はY方向の考え方が異なるため、初心者はここで混乱しやすいです。
2-1. X座標とY座標の意味
X座標は横方向の位置を表します。値が大きくなるほど右へ移動します。
Y座標は縦方向の位置を表します。画面座標では、値が大きくなるほど下へ移動します。
C#Point p = new Point(200, 100);
この場合、p.Xは200、p.Yは100です。画面上では、左上を基準にして右へ200、下へ100の位置を意味します。
2-2. 画面座標では左上が原点になる
Windows Formsや多くの画面描画では、左上が原点になります。原点とは(0, 0)の位置です。
(0,0) ─────→ X方向
│
│
↓
Y方向
つまり、new Point(0, 0)は画面やフォームの左上を表します。new Point(100, 0)なら右へ100、new Point(0, 100)なら下へ100の位置です。
2-3. 数学の座標と画面座標の違い
数学でよく使う座標では、原点から上に行くほどYの値が大きくなります。しかし、画面座標では下に行くほどYの値が大きくなります。
たとえば、数学では(0, 10)は原点より上の位置をイメージすることが多いですが、画面座標では(0, 10)は左上から下へ10移動した位置です。
この違いを理解していないと、「Yを増やしたのに上ではなく下に動いた」と混乱することがあります。
2-4. ピクセル単位で位置を指定する考え方
Windows Formsの多くの場面では、座標はピクセル単位で考えます。たとえば、new Point(50, 30)は「左から50ピクセル、上から30ピクセル」の位置です。
C#label.Location = new Point(50, 30);
このように、Pointは画面上の部品を配置するときに直感的に使えます。ただし、WPFではピクセルそのものというより、デバイス非依存単位として扱われることが多いため、Windows Formsとは少し感覚が異なります。
3. System.Drawing.Pointの使い方
System.Drawing.Pointは、Windows FormsやGDI+系の描画処理でよく使われるPointです。整数のXとYを使って位置を表すため、ボタンの配置やマウス座標、図形描画などで扱いやすい型です。
3-1. System.Drawing.Pointとは
System.Drawing.Pointは、System.Drawing名前空間にある構造体です。整数のX座標とY座標を持ち、2次元平面上の位置を表します。Microsoftのドキュメントでも、System.Drawing.Pointは整数のx座標とy座標の順序ペアを表す構造体として説明されています。Microsoft Learn
Windows Formsでは、次のような場面でよく使います。
C#button.Location = new Point(20, 30);
このコードでは、ボタンの位置をX = 20、Y = 30に設定しています。
3-2. using System.Drawing; を追加する方法
System.Drawing.Pointを短くPointと書くには、ファイルの先頭に次のusingを追加します。
C#using System.Drawing;
これにより、毎回System.Drawing.Pointと書かずに済みます。
C#using System.Drawing;
Point point = new Point(10, 20);
もしusing System.Drawing;を書かない場合は、完全修飾名を使います。
C#System.Drawing.Point point = new System.Drawing.Point(10, 20);
3-3. Pointの宣言と初期化
Pointは次のように宣言・初期化できます。
C#Point p1 = new Point(10, 20);
また、初期値を指定せずに作ることもできます。
C#Point p2 = new Point();
この場合、XとYはどちらも0になります。
C#Console.WriteLine(p2.X); // 0
Console.WriteLine(p2.Y); // 0
3-4. XプロパティとYプロパティの取得・変更
Pointの座標は、XプロパティとYプロパティで取得できます。
C#Point point = new Point(100, 50);
Console.WriteLine(point.X); // 100
Console.WriteLine(point.Y); // 50
また、XやYの値は変更できます。
C#point.X = 200;
point.Y = 80;
Console.WriteLine(point); // {X=200,Y=80}
Pointは位置を表すだけでなく、後から座標を変更して移動先を表すこともできます。
3-5. Windows FormsでPointを使うサンプルコード
Windows Formsでボタンの位置をPointで指定する例です。
C#using System;
using System.Drawing;
using System.Windows.Forms;
public class MainForm : Form
{
public MainForm()
{
Button button = new Button();
button.Text = "クリック";
button.Location = new Point(50, 30);
button.Size = new Size(100, 40);
Controls.Add(button);
}
}
public static class Program
{
[STAThread]
public static void Main()
{
Application.Run(new MainForm());
}
}
このコードでは、ボタンの左上位置をnew Point(50, 30)で指定しています。つまり、フォームの左上から右へ50、下へ30の位置にボタンを配置します。
3-6. Point.Emptyの意味と使いどころ
Point.Emptyは、空のPointを表します。実際にはX = 0、Y = 0のPointとして扱われます。
C#Point p = Point.Empty;
Console.WriteLine(p.X); // 0
Console.WriteLine(p.Y); // 0
初期状態を表したいときや、まだ位置が設定されていないことを分かりやすく示したいときに使えます。
C#Point startPoint = Point.Empty;
ただし、Point.Emptyは「座標が存在しない」という意味ではなく、基本的には(0, 0)を表す点だと考えておくとよいです。
4. Pointを使った基本操作
ここからは、Pointを使った基本操作を見ていきます。座標の取得、変更、移動、比較、Sizeとの組み合わせなどを理解すると、実際の画面アプリや描画処理で使いやすくなります。
4-1. Pointの座標を取得する
Pointの座標は、XとYで取得します。
C#Point point = new Point(120, 80);
int x = point.X;
int y = point.Y;
Console.WriteLine($"X座標: {x}");
Console.WriteLine($"Y座標: {y}");
実行すると、X座標: 120、Y座標: 80のように表示されます。
4-2. Pointの座標を変更する
PointのXとYは、次のように変更できます。
C#Point point = new Point(10, 20);
point.X = 50;
point.Y = 100;
Console.WriteLine(point); // {X=50,Y=100}
マウスの位置やコントロールの位置を後から変更したい場合に使います。
4-3. Offsetで座標を移動する
Offsetメソッドを使うと、現在の座標から指定した分だけ移動できます。
C#Point point = new Point(10, 20);
point.Offset(5, 10);
Console.WriteLine(point); // {X=15,Y=30}
この例では、Xが5増えて15に、Yが10増えて30になっています。
コントロールを少し右下へ移動したい場合などに便利です。
C#button.Location = new Point(50, 50);
button.Location = new Point(button.Location.X + 10, button.Location.Y + 10);
Offsetを使えば、座標の移動をより分かりやすく書けます。
4-4. Point同士を比較する
Point同士は、==や!=で比較できます。
C#Point p1 = new Point(10, 20);
Point p2 = new Point(10, 20);
Point p3 = new Point(30, 40);
Console.WriteLine(p1 == p2); // True
Console.WriteLine(p1 == p3); // False
XとYの両方が同じであれば、同じPointとして扱われます。Microsoftのドキュメントでも、System.Drawing.Pointの等価演算子は2つのPointのXとYが等しいかを比較するものとして説明されています。Microsoft Learn
4-5. Sizeと組み合わせて座標を加算・減算する
System.Drawing.Pointは、Sizeと組み合わせて座標を移動できます。Sizeは幅と高さを表す型ですが、移動量として使うこともできます。
C#Point point = new Point(10, 20);
Size size = new Size(5, 10);
Point moved = point + size;
Console.WriteLine(moved); // {X=15,Y=30}
逆に、Sizeを引くこともできます。
C#Point point = new Point(10, 20);
Size size = new Size(5, 10);
Point moved = point - size;
Console.WriteLine(moved); // {X=5,Y=10}
Point + Sizeは「現在の位置から横と縦にどれだけ移動するか」を表すと考えると分かりやすいです。
4-6. ToStringでPointの中身を確認する
Pointの中身を確認したいときは、ToStringを使えます。
C#Point point = new Point(10, 20);
Console.WriteLine(point.ToString());
多くの場合、次のような形式で表示されます。
{X=10,Y=20}
デバッグ中に「今どの座標になっているか」を確認したいときに便利です。
5. System.Windows.Pointの使い方
System.Windows.Pointは、WPFでよく使われるPointです。Windows Formsで使うSystem.Drawing.Pointとは名前が似ていますが、所属する名前空間も用途も異なります。
5-1. System.Windows.Pointとは
System.Windows.Pointは、System.Windows名前空間にある構造体で、2次元空間のX座標とY座標の組を表します。Microsoft Learn
WPFでは、図形の座標、マウス位置、レイアウト、アニメーション、ジオメトリなど、さまざまな場面で使われます。
C#System.Windows.Point point = new System.Windows.Point(10.5, 20.5);
このように、小数を含む座標を扱える点が大きな特徴です。
5-2. WPFでPointを使う場面
WPFでは、次のような場面でPointを使います。
C#Point mousePosition = Mouse.GetPosition(this);
このコードでは、指定した要素に対するマウスの位置を取得します。
また、図形を描画するときにもPointが登場します。たとえば、LineGeometryやPathFigureなどでは、始点や終点をPointで指定します。
C#LineGeometry line = new LineGeometry(
new Point(10, 10),
new Point(100, 100)
);
5-3. XAMLやマウス座標でPointを扱う例
WPFでは、XAMLの中で座標を指定する場合があります。System.Windows.Pointは、XAMLで"x,y"または"x y"のような形式で指定できます。Microsoftのドキュメントでも、XAMLではPointのXとYの区切りにカンマまたはスペースを使えると説明されています。Microsoft Learn
XML<Line X1="10" Y1="20" X2="150" Y2="80" Stroke="Black" />
また、マウスクリック位置を取得する場合は次のように書けます。
C#private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
Point point = e.GetPosition(this);
MessageBox.Show($"X={point.X}, Y={point.Y}");
}
この例では、ウィンドウ内でクリックされた位置をPointとして取得しています。
5-4. System.Windows.Pointの宣言と初期化
WPFでPointを使う場合は、次のように宣言します。
C#using System.Windows;
Point point = new Point(10, 20);
小数も指定できます。
C#Point point = new Point(10.5, 20.75);
System.Drawing.Pointと同じようにXとYを持ちますが、System.Windows.Pointではより細かい座標指定ができます。
5-5. double型の座標を扱える特徴
System.Windows.PointのコンストラクターはPoint(Double, Double)として用意されており、指定した座標を持つPoint構造体を作成できます。Microsoft Learn
そのため、次のように小数を含む座標を扱えます。
C#Point point = new Point(12.5, 30.25);
これは、WPFがより柔軟なレイアウトや拡大縮小、変換処理を扱うためです。Windows FormsのSystem.Drawing.Pointが整数中心なのに対して、WPFのSystem.Windows.Pointは小数を使った精密な位置指定に向いています。
5-6. PointCollectionとの関係
WPFには、複数のPointをまとめて扱うPointCollectionがあります。たとえば、PolygonやPolylineで複数の点を指定するときに使われます。
XML<Polygon Points="10,10 100,10 50,80"
Stroke="Black"
Fill="LightBlue" />
C#で書く場合は、次のようにPointCollectionへPointを追加できます。
C#PointCollection points = new PointCollection();
points.Add(new Point(10, 10));
points.Add(new Point(100, 10));
points.Add(new Point(50, 80));
複数の座標を順番に並べて、線や多角形を作るときに便利です。
6. System.Drawing.PointとSystem.Windows.Pointの違い
C#でPointを調べていると、System.Drawing.PointとSystem.Windows.Pointの2つが出てきて混乱することがあります。どちらもPointという名前ですが、使う場面や座標の型が異なります。
6-1. 名前空間の違い
System.Drawing.Pointは、System.Drawing名前空間にあります。
C#System.Drawing.Point drawingPoint = new System.Drawing.Point(10, 20);
System.Windows.Pointは、System.Windows名前空間にあります。
C#System.Windows.Point windowsPoint = new System.Windows.Point(10, 20);
どちらも名前がPointなので、両方の名前空間を同時にusingすると、どちらのPointを指しているのか分からなくなる場合があります。
6-2. 主な利用場面の違い
System.Drawing.Pointは、主にWindows FormsやGDI+系の描画処理で使われます。ボタンやラベルなどの配置、マウス座標、画像処理、線や図形の描画などで登場します。
一方、System.Windows.PointはWPFで使われます。WPFの図形、マウス位置、レイアウト、座標変換、XAMLでの座標指定などで利用されます。
つまり、Windows FormsならSystem.Drawing.Point、WPFならSystem.Windows.Pointと覚えると分かりやすいです。
6-3. 座標の型がintかdoubleかの違い
大きな違いは、座標の型です。
System.Drawing.Pointは整数の座標を扱います。Microsoftのドキュメントでも、整数のx座標とy座標のペアを表すと説明されています。Microsoft Learn
C#System.Drawing.Point p = new System.Drawing.Point(10, 20);
一方、System.Windows.Pointはdouble型の座標を扱えます。ドキュメントでもPoint(Double, Double)コンストラクターが用意されていることが確認できます。Microsoft Learn
C#System.Windows.Point p = new System.Windows.Point(10.5, 20.25);
整数だけで十分ならSystem.Drawing.Point、小数を含む精密な座標を扱いたいならSystem.Windows.Pointが向いています。
6-4. Windows FormsとWPFで使い分ける
Windows Formsアプリでは、基本的にSystem.Drawing.Pointを使います。
C#button.Location = new System.Drawing.Point(50, 30);
WPFアプリでは、基本的にSystem.Windows.Pointを使います。
C#System.Windows.Point point = Mouse.GetPosition(this);
同じC#でも、使っているUIフレームワークによって適切なPointが変わります。初心者はまず、自分が作っているアプリがWindows FormsなのかWPFなのかを確認しましょう。
6-5. .NET Core・.NET 5以降でSystem.Drawingを使うときの注意点
.NET 6以降では、System.Drawing.CommonはWindows固有のライブラリとして扱われ、Windows以外のOS向けにコンパイルすると警告が出ることがあります。また、Windows以外では構成によってPlatformNotSupportedExceptionが発生する可能性があります。Microsoft Learn
特に注意したいのは、LinuxやmacOS上で画像処理を行うためにSystem.Drawing.Commonを使うケースです。Microsoftはクロスプラットフォームアプリでは、SkiaSharp、ImageSharp、Aspose.Drawing、Microsoft.Maui.Graphicsなどへの移行を推奨しています。Microsoft Learn
ただし、Windows FormsアプリでWindows上のUI座標としてSystem.Drawing.Pointを使う場合は、一般的な使い方として理解して問題ありません。クロスプラットフォームの画像処理やサーバーサイド処理でSystem.Drawing系APIを使う場合は、実行環境に注意が必要です。
6-6. どちらのPointを使うべきか判断する基準
どちらのPointを使うべきかは、次の基準で判断できます。
| 目的 | 使うPoint |
|---|---|
| Windows Formsでコントロールを配置したい | System.Drawing.Point |
| Windows Formsでマウス座標を扱いたい | System.Drawing.Point |
| GDI+で図形を描画したい | System.Drawing.Point |
| WPFでマウス位置を取得したい | System.Windows.Point |
| WPFで図形や線を扱いたい | System.Windows.Point |
| 小数座標を扱いたい | System.Windows.PointまたはPointF |
| クロスプラットフォーム画像処理をしたい | System.Drawing以外の選択肢も検討 |
初心者は、Windows FormsならSystem.Drawing.Point、WPFならSystem.Windows.Pointと覚えるのが最も実用的です。
7. Point使用時によくあるエラーと解決方法
Pointはシンプルな型ですが、名前空間の違いや参照設定の不足によってエラーが出ることがあります。特に、System.Drawing.PointとSystem.Windows.Pointを混同すると、コンパイルエラーになりやすいです。
7-1. Pointが見つからない場合
次のようなコードを書いたとします。
C#Point point = new Point(10, 20);
このとき、Pointが見つからないというエラーが出る場合は、必要な名前空間が読み込まれていない可能性があります。
Windows FormsでSystem.Drawing.Pointを使うなら、次のusingを追加します。
C#using System.Drawing;
WPFでSystem.Windows.Pointを使うなら、次のusingを追加します。
C#using System.Windows;
7-2. usingの追加忘れ
初心者によくあるのが、usingの追加忘れです。
C#Point p = new Point(10, 20);
このコードだけでは、C#コンパイラはPointがどの名前空間の型なのか判断できません。次のように書くと解決します。
C#using System.Drawing;
Point p = new Point(10, 20);
または、完全修飾名を使います。
C#System.Drawing.Point p = new System.Drawing.Point(10, 20);
7-3. System.Drawing.PointとSystem.Windows.Pointの参照があいまいになる原因
次のように、両方の名前空間をusingしているとします。
C#using System.Drawing;
using System.Windows;
Point p = new Point(10, 20);
この場合、PointがSystem.Drawing.PointなのかSystem.Windows.Pointなのか判断できず、参照があいまいになることがあります。
この問題は、どちらも同じPointという名前を持っていることが原因です。
7-4. CS0104エラーの解決方法
CS0104は、型名が複数の名前空間に存在し、どれを使うべきか判断できないときに発生するエラーです。
たとえば、次のようなケースです。
C#using System.Drawing;
using System.Windows;
Point p = new Point(10, 20);
解決するには、完全修飾名を使います。
C#System.Drawing.Point p1 = new System.Drawing.Point(10, 20);
System.Windows.Point p2 = new System.Windows.Point(10.5, 20.5);
または、片方のusingを削除して、必要な方だけを使う方法もあります。
7-5. 完全修飾名でPointを指定する方法
完全修飾名とは、名前空間を含めて型名を書く方法です。
C#System.Drawing.Point drawingPoint = new System.Drawing.Point(10, 20);
C#System.Windows.Point windowsPoint = new System.Windows.Point(10.5, 20.5);
両方のPointを同じファイルで使う場合は、完全修飾名を使うと分かりやすくなります。
また、エイリアスを使う方法もあります。
C#using DrawingPoint = System.Drawing.Point;
using WpfPoint = System.Windows.Point;
DrawingPoint p1 = new DrawingPoint(10, 20);
WpfPoint p2 = new WpfPoint(10.5, 20.5);
この書き方にすると、コード内でどちらのPointを使っているかが明確になります。
7-6. 型変換が必要になるケース
System.Drawing.PointとSystem.Windows.Pointは別の型なので、そのまま代入できません。
C#System.Drawing.Point p1 = new System.Drawing.Point(10, 20);
// エラーになる
// System.Windows.Point p2 = p1;
変換したい場合は、自分でXとYを取り出して新しいPointを作ります。
C#System.Drawing.Point drawingPoint = new System.Drawing.Point(10, 20);
System.Windows.Point windowsPoint =
new System.Windows.Point(drawingPoint.X, drawingPoint.Y);
逆に、System.Windows.PointからSystem.Drawing.Pointへ変換する場合は、小数を整数にする必要があります。
C#System.Windows.Point windowsPoint = new System.Windows.Point(10.7, 20.3);
System.Drawing.Point drawingPoint =
new System.Drawing.Point((int)windowsPoint.X, (int)windowsPoint.Y);
この場合、小数部分は切り捨てられます。四捨五入したい場合はMath.Roundを使います。
C#System.Drawing.Point drawingPoint =
new System.Drawing.Point(
(int)Math.Round(windowsPoint.X),
(int)Math.Round(windowsPoint.Y)
);
8. Point・PointF・Size・Rectangleの違い
C#で座標を扱っていると、Point以外にもPointF、Size、Rectangleなどが出てきます。どれも似ていますが、表す意味が違います。
8-1. PointとPointFの違い
Pointは整数の座標を表します。PointFは浮動小数点数の座標を表します。Microsoftのドキュメントでも、PointFは浮動小数点のx座標とy座標の組を表す構造体として説明されています。Microsoft Learn
C#Point point = new Point(10, 20);
PointF pointF = new PointF(10.5f, 20.5f);
ピクセル単位で整数座標を扱うならPoint、小数を含む座標を扱いたいならPointFが向いています。
8-2. PointとSizeの違い
Pointは位置を表します。
C#Point location = new Point(10, 20);
Sizeは大きさを表します。
C#Size size = new Size(100, 50);
PointのXとYは「どこか」を示します。SizeのWidthとHeightは「どれくらいの大きさか」を示します。MicrosoftのSystem.Drawing名前空間の説明でも、Sizeは幅と高さを指定する整数の組として説明されています。Microsoft Learn
8-3. PointとRectangleの違い
Pointは1つの位置です。Rectangleは位置と大きさを持つ四角形の範囲です。
C#Point point = new Point(10, 20);
Rectangle rect = new Rectangle(10, 20, 100, 50);
Rectangleの引数は、一般的にX、Y、Width、Heightです。
C#Rectangle rect = new Rectangle(10, 20, 100, 50);
これは、左上が(10, 20)で、幅が100、高さが50の四角形を表します。
8-4. 座標・大きさ・範囲をどう使い分けるか
使い分けは、何を表したいかで考えます。
| 表したいもの | 使う型 |
|---|---|
| 1つの位置 | Point |
| 小数を含む位置 | PointF |
| 幅と高さ | Size |
| 小数を含む幅と高さ | SizeF |
| 四角形の範囲 | Rectangle |
| 小数を含む四角形の範囲 | RectangleF |
たとえば、ボタンの位置を指定するならPoint、ボタンの大きさを指定するならSize、描画範囲を指定するならRectangleを使います。
8-5. 目的別に選ぶ関連構造体一覧
目的別に整理すると、次のようになります。
C#Point location = new Point(10, 20); // 位置
PointF preciseLocation = new PointF(10.5f, 20.5f); // 小数位置
Size size = new Size(100, 50); // 大きさ
SizeF preciseSize = new SizeF(100.5f, 50.5f); // 小数の大きさ
Rectangle area = new Rectangle(10, 20, 100, 50); // 範囲
RectangleF preciseArea = new RectangleF(10.5f, 20.5f, 100.5f, 50.5f);
初心者はまず、Pointは位置、Sizeは大きさ、Rectangleは範囲と覚えましょう。
9. 実践例で学ぶPointの使い方
ここでは、実際のアプリ開発でよくあるPointの使い方を紹介します。コード例を見ながら、どのような場面でPointが使われるのか確認していきましょう。
9-1. ボタンやコントロールの位置を指定する
Windows Formsでは、コントロールのLocationにPointを設定します。
C#Button button = new Button();
button.Text = "OK";
button.Location = new Point(50, 30);
button.Size = new Size(100, 40);
Controls.Add(button);
このコードでは、ボタンをフォームの左上から横に50、縦に30の位置へ配置します。
ラベルやテキストボックスでも同じように使えます。
C#Label label = new Label();
label.Text = "名前";
label.Location = new Point(20, 20);
Controls.Add(label);
9-2. マウスクリック位置をPointで取得する
Windows Formsでは、マウスイベントのLocationからクリック位置を取得できます。
C#private void Form1_MouseClick(object sender, MouseEventArgs e)
{
Point clickPoint = e.Location;
MessageBox.Show($"クリック位置: X={clickPoint.X}, Y={clickPoint.Y}");
}
この例では、フォーム上でクリックされた位置をPointとして取得しています。
クリック位置に図形を描画したい場合にも使えます。
C#private Point lastClickPoint;
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
lastClickPoint = e.Location;
Invalidate();
}
9-3. 図形や線を描画する
Windows Formsで線を描画する場合、始点と終点にPointを使えます。
C#private void Form1_Paint(object sender, PaintEventArgs e)
{
Point start = new Point(10, 10);
Point end = new Point(150, 100);
e.Graphics.DrawLine(Pens.Black, start, end);
}
四角形や円を描く場合は、PointだけでなくRectangleもよく使います。
C#private void Form1_Paint(object sender, PaintEventArgs e)
{
Rectangle rect = new Rectangle(20, 20, 100, 60);
e.Graphics.DrawRectangle(Pens.Blue, rect);
}
線の始点や終点はPoint、範囲を持つ図形はRectangleで表すと分かりやすいです。
9-4. 画像上の座標を扱う
画像処理でもPointは使われます。たとえば、画像上の特定の位置を指定して色を取得する場合です。
C#Bitmap bitmap = new Bitmap("sample.png");
Point point = new Point(10, 20);
Color color = bitmap.GetPixel(point.X, point.Y);
Console.WriteLine(color);
この例では、画像の(10, 20)の位置にあるピクセルの色を取得しています。
ただし、System.Drawing.Commonを使った画像処理をWindows以外のOSで行う場合は注意が必要です。.NET 6以降ではSystem.Drawing.CommonがWindows固有のライブラリとして扱われているため、クロスプラットフォーム用途では別の画像処理ライブラリも検討しましょう。Microsoft Learn
9-5. WPFで線や図形の座標を指定する
WPFでは、XAMLで線や図形の座標を指定できます。
XML<Canvas>
<Line X1="10" Y1="10"
X2="150" Y2="80"
Stroke="Black"
StrokeThickness="2" />
</Canvas>
C#側でPointを使う場合は、次のように書けます。
C#Point start = new Point(10, 10);
Point end = new Point(150, 80);
LineGeometry geometry = new LineGeometry(start, end);
また、マウスクリック位置を取得して、その位置に図形を追加することもできます。
C#private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
Point point = e.GetPosition(MyCanvas);
Ellipse ellipse = new Ellipse
{
Width = 10,
Height = 10,
Fill = Brushes.Red
};
Canvas.SetLeft(ellipse, point.X);
Canvas.SetTop(ellipse, point.Y);
MyCanvas.Children.Add(ellipse);
}
WPFではPointのXとYがdoubleとして扱えるため、細かい位置指定に向いています。
10. C#のPointに関するよくある質問
最後に、C#のPointに関するよくある質問をまとめます。
10-1. C#のPointは何に使うものですか?
C#のPointは、2次元上の位置を表すために使います。代表的な用途は、画面上のコントロール配置、マウス座標の取得、線や図形の描画、画像上の位置指定などです。
たとえば、Windows Formsでは次のように使います。
C#button.Location = new Point(50, 30);
これは、ボタンの位置を左上から横に50、縦に30の場所へ設定するコードです。
10-2. PointのXとYはどちらが横・縦ですか?
Xが横方向、Yが縦方向です。
C#Point point = new Point(100, 50);
この場合、X = 100、Y = 50です。画面座標では、Xが大きくなるほど右へ、Yが大きくなるほど下へ移動します。
10-3. System.Drawing.PointとSystem.Windows.Pointは同時に使えますか?
同時に使えます。ただし、どちらも名前がPointなので、参照があいまいになることがあります。
その場合は、完全修飾名を使います。
C#System.Drawing.Point drawingPoint = new System.Drawing.Point(10, 20);
System.Windows.Point windowsPoint = new System.Windows.Point(10.5, 20.5);
または、エイリアスを使うと分かりやすくなります。
C#using DrawingPoint = System.Drawing.Point;
using WpfPoint = System.Windows.Point;
DrawingPoint p1 = new DrawingPoint(10, 20);
WpfPoint p2 = new WpfPoint(10.5, 20.5);
10-4. Pointの座標を小数で扱いたい場合はどうすればいいですか?
Windows FormsやSystem.Drawing系で小数座標を扱いたい場合は、PointFを使います。
C#PointF point = new PointF(10.5f, 20.5f);
WPFの場合は、System.Windows.Pointを使えば小数座標を扱えます。
C#System.Windows.Point point = new System.Windows.Point(10.5, 20.5);
整数座標ならPoint、小数座標ならPointFまたはSystem.Windows.Pointと考えるとよいです。
10-5. ConsoleアプリでPointは使えますか?
ConsoleアプリでもPointは使えます。ただし、画面上のボタン配置や描画をしない場合は、使う場面は限られます。
C#using System;
using System.Drawing;
class Program
{
static void Main()
{
Point point = new Point(10, 20);
Console.WriteLine($"X={point.X}, Y={point.Y}");
}
}
このように、座標データを表す目的であればConsoleアプリでも利用できます。
10-6. 初心者はどのPointから覚えるべきですか?
初心者は、自分が使っているアプリの種類に合わせて覚えるのがおすすめです。
Windows Formsを学んでいるなら、まずSystem.Drawing.Pointを覚えましょう。コントロールのLocationやマウス座標でよく使うため、実践的に理解しやすいです。
WPFを学んでいるなら、System.Windows.Pointを覚えましょう。WPFのマウスイベント、図形、XAML、座標変換などでよく使います。
どちらにも共通する基本は、「PointはXとYを持つ位置情報」ということです。まずはこの考え方を押さえれば、System.Drawing.PointでもSystem.Windows.Pointでも理解しやすくなります。
まとめ
C#のPointは、2次元上の位置を表すための基本的な型です。Xは横方向、Yは縦方向を表し、画面座標では左上を原点として、Xが増えると右へ、Yが増えると下へ移動します。
Windows Formsでは主にSystem.Drawing.Pointを使い、ボタンやラベルなどのコントロールの位置指定、マウスクリック位置の取得、線や図形の描画などで利用します。System.Drawing.Pointは整数座標を扱うため、ピクセル単位の位置指定に向いています。
WPFでは主にSystem.Windows.Pointを使います。System.Windows.Pointはdouble型の座標を扱えるため、小数を含む位置指定や柔軟なレイアウト、図形描画に向いています。
また、Pointは位置、Sizeは大きさ、Rectangleは範囲、PointFは小数座標を表す型です。これらを正しく使い分けることで、C#の画面アプリや描画処理が理解しやすくなります。
csharp pointを学ぶうえで大切なのは、単にコードの書き方を覚えることではなく、「何の位置を表しているのか」「整数座標なのか小数座標なのか」「Windows FormsなのかWPFなのか」を意識することです。まずはnew Point(x, y)で位置を作り、XとYを取得・変更する基本操作から慣れていきましょう。

