コンポーネントの作成 (非ビジュアルコンポーネントの作成) - C#

C#でWIndows Form アプリケーションのコンポーネント (非ビジュアルコンポーネント)の作成手順とコードを紹介します。

手順

Windows Formアプリケーションを作成します。

コンポーネントの作成

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


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


中央のエリアのリストの[コンポーネントクラス]の項目をクリックして選択します。


[名前]のテキストボックスにファイル名を入力します。今回は"MyComponent.cs" とします。設定後[追加]ボタンをクリックします。


MyComponent.csファイルが追加されます。


生成されたコンポーネントのソースコードは以下になります。
MyComponent.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormComponent
{
  public partial class MyComponent : Component
  {
    public MyComponent()
    {
      InitializeComponent();
    }

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

      InitializeComponent();
    }
  }
}
MyComponent.Designer.cs
namespace WindowsFormComponent
{
  partial class MyComponent
  {
    /// <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
  }
}

プロジェクトをビルドします。ビルド後、ツールパレットに、"MyComponent" のコンポーネントが追加されます。

コンポーネントの実装

コンポーネントのコードファイルを以下のコードに変更します。
Calcメソッドを追加します。2つの引数を受け取り、加算した値を返すメソッドです。
MyComponent.cs (修正後)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormComponent
{
  public partial class MyComponent : Component
  {
    public MyComponent()
    {
      InitializeComponent();
    }

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

      InitializeComponent();
    }

    public int Calc(int a, int b)
    {
      return a + b;
    }
  }
}

コンポーネントのフォームへの配置

コンポーネントをフォームに配置します。フォームデザイナを表示し、ツールボックスの"MyComponent"をフォームにドラッグ&ドロップします。 コンポーネントをドロップした状態が下図です。


フォームデザイナの下部に非ビジュアルなコンポーネント(コントロール)のエリアが追加され、"myComponent1"コンポーネントが追加された状態になります。

プログラムの実装

UI

フォームにボタンとテキストボックスを追加します。

コード

フォームのコードを以下のコードに変更します。
namespace WindowsFormComponent
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      int r = myComponent1.Calc(12, 6);
      textBox1.Text = string.Format("{0:d}",r);
    }
  }
}

実行結果

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


[button1]をクリックします。MyComponentのCalcメソッドの実行結果がテキストボックスに表示されます。

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