ウィンドウコントロールのコンポーネントの作成 (ビジュアルコンポーネントの作成) - C#

C#でWindows Formのウィンドウコントロールのコンポーネントを作成する手順とコードを紹介します。

概要

PanelやButtonといったウィンドウコントロールがありますが、独自のウィンドウコントロールを作成してコンポーネント化して利用したい場合があります。
この記事では、Windows Formでのウィンドウコントロールコンポーネントの作成手順とコンポーネントのコードを紹介します。

手順

コンポーネントの作成

Windows Formアプリケーションを作成します。
ソリューションエクスプローラーでプロジェクトのノードをクリックして選択し、右クリックします。 ポップアップメニューが表示されますので、[追加]メニューの[新しい項目]をクリックします。


[新しい項目の追加]ダイアログが表示されます。


ダイアログの中央のリストから[コンポーネントクラス]を選択します。


ダイアログ下部の[名前]のテキストボックスにファイル名を設定します。今回は"WindowControlComponent.cs" とします。


WindowControlComponent.cs のファイルが追加されます。プロジェクトをビルドすると、ツールボックスウィンドウの上部に [WindowControlComponent]のコントロールが表示されます。


コード

コンポーネントのコードを修正します。
今回はウィンドウコントロールを作成するため、基底クラスをComponentから、Controlに変更します。
また、OnPaintメソッドをオーバーライドし、コントロールの外枠を青線で描画するコードを実装します。
WindowControlComponent.cs (変更前)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormWindowControlComponent
{
  public partial class WindowControlComponent : Component
  {
    public WindowControlComponent()
    {
      InitializeComponent();
    }

    public WindowControlComponent(IContainer container)
    {
      container.Add(this);

      InitializeComponent();
    }
  }
}
WindowControlComponent.cs (変更後)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormWindowControlComponent
{
  public partial class WindowControlComponent : Control
  {
    public WindowControlComponent()
    {
      InitializeComponent();
    }

    public WindowControlComponent(IContainer container)
    {
      container.Add(this);

      InitializeComponent();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
      Pen p = new Pen(Color.Blue,1);
      e.Graphics.DrawRectangle(p, new Rectangle(0, 0, this.Width - 1, this.Height - 1));
    }
  }
}
WindowControlComponent.Designer.cs
namespace WindowsFormWindowControlComponent
{
  partial class WindowControlComponent
  {
    /// <summary>
    /// 必要なデザイナー変数です。
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary> 
    /// 使用中のリソースをすべてクリーンアップします。
    /// </summary>
    /// <param name="disposing">マネージド リソースを破棄する場合は true を指定し、その他の場合は false を指定します。</param>
    protected override void Dispose(bool disposing)
    {
      if (disposing && (components != null)) {
        components.Dispose();
      }
      base.Dispose(disposing);
    }

    #region コンポーネント デザイナーで生成されたコード

    /// <summary>
    /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
    /// コード エディターで変更しないでください。
    /// </summary>
    private void InitializeComponent()
    {
      components = new System.ComponentModel.Container();
    }

    #endregion
  }
}

ウィンドウコントロールの配置

ツールボックスの[WindowControlComponent]の項目をドラッグしてフォームにドロップします。


コントロールがフォームにドロップされると、WindowControlComponentがウィンドウに配置されます。コントロールの外枠が青線で描画されることが確認できます。


コントロールのサイズを変更します。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。作成したウィンドウコントロールが表示されました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2011-11-02
iPentec all rights reserverd.