WindowsFormsアプリで、自作コントロールを作って学習

目指すもの

ゲーム盤があって駒があるタイプのなにがしかのボードゲーム

名詞抽出法

名詞、名詞句

ゲーム盤、盤のイメージ、駒、駒のイメージ

動詞、動詞句

駒は、画像イメージを持っている
駒は、画像イメージを表示できる

構成のイメージ

ゲーム盤が複数の駒を持っている
駒は、画像を持っている
駒は、ビジュアルを表示することができる(ピクチャボックスを持っている)

画像のソース

WindowsFormsのライブラリを使って作成するケース

System.Windows.Forms名前空間のUserControlクラス

UserControlクラスとは

フォームデザイナで他のコントロールを作成するために使用することができる空のコントロールを表します。 フォームを拡張することで、UserControl はユーザーコントロールに必要な標準の位置決めおよびニーモニック処理コードをすべて継承します。

UserControlクラスから継承するメリット

Windowsホームアプリでユーザーコントロールクラスを継承すると、アプリケーションで複数回使用されるカスタムUIコンポーネントを簡単に作成できます。このアプローチにはいくつかの利点があります。

まず、ユーザーコントロールを使用することで、同じUIコンポーネントをアプリ内の複数の場所で使用できます。これにより、UIの一貫性を維持し、開発時間を節約できます。

また、ユーザーコントロールを継承すると、親クラスから多くの機能を継承できます。たとえば、親クラスには、ウィンドウの作成や再描画、イベント処理などの機能が含まれています。これらの機能を使用することで、カスタムUIコンポーネントを作成するのに必要なコードの量が減り、開発時間が短縮されます。

さらに、ユーザーコントロールを使用することで、再利用可能なコードを作成できます。このアプローチにより、複数のアプリケーションで同じUIコンポーネントを使用でき、開発の効率性が向上します。

総合的に、ユーザーコントロールクラスを継承することで、カスタムUIコンポーネントを作成するのに必要なコードの量を減らし、開発時間を短縮できます。また、同じUIコンポーネントをアプリ内の複数の場所で使用できるため、一貫性を維持し、再利用可能なコードを作成できます。

自作コントロールのデザイン設計

まず、プロジェクトにユーザーコントロールを継承したクラスを作成します
プロジェクトを右クリックした時の追加メニューでできます

駒(Piece)クラスに属性として画像と画像を表示する機能を持たせたいのでPictureBoxをドラッグ&ドロップします

ソリューションエクスプローラ

ライブラリを活用して開発を進めることを目標にします

UserControlクラスを継承して自作のクラスを作ります

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ClassSample
{
    public partial class Piece : UserControl
    {

        public Image Image
        {
            get => pictureBox1.Image;
            set
            {
                pictureBox1.Image = value;
            }
        }
        public Piece()
        {
            InitializeComponent();
        }
    }
}

このコードは、Windowsフォームアプリケーションを開発する際に使用される、ユーザー定義コントロールである「Piece」を定義しています。

まず、必要な名前空間をusingで読み込みます。System.Drawing名前空間はグラフィックス関連の機能を提供し、System.Windows.Forms名前空間はWindowsフォームアプリケーションの機能を提供します。

次に、PieceクラスがUserControlクラスを継承していることが示されています。これは、Pieceがユーザー定義コントロールであることを示しています。

Pieceクラスには、InitializeComponent()というメソッドがあります。これは、Visual Studioのデザイナーで自動的に生成されるメソッドであり、コントロールの初期化に必要なコードが含まれています。

また、Pieceクラスには、Imageというプロパティがあります。このプロパティは、PictureBoxコントロールのImageプロパティにアクセスし、取得または設定します。PieceクラスはPictureBoxをコントロールとして含んでいるため、PictureBoxのImageプロパティにアクセスすることができます。

以上のように、このコードは、Pieceクラスを定義し、そのプロパティにアクセスするための手段を提供しています。このコントロールを使用すると、画像を表示するための簡単な方法を提供することができます。

フォームに配置

Form1.cs

コードは、.NET系になっていますが、.NetFrameWorkの場合、リソースは、Properties.Resources.になります

namespace ClassSample
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

            piece1.Image = Resource1.プログラミング;
        }
    }
}

上記サンプルでは、ファイル名が「プログラミング」でしたのでそのようになっていますが、次のように右クリックして、名前の変更で適切な英単語にすることをお勧めします

クラス図