プログラムコードでコントロールを実行時に作成する / コントロールを動的に生成する - C#

テキストボックスやボタンなどのウィンドウコントロールを実行時に作成するコードを紹介します。
コードでコントロールを作成することにより、コントロールを実行時に動的に作成できます。

概要

コードでコントロールを作成する場合は、コントロールのオブジェクトのインスタンスを作成し、廃止するウィンドウコントロールのControlsプロパティのAddメソッドを呼び出し、Addメソッドの引数に作成したコントロールのオブジェクトを与えます。

プログラム例 (1つのコントロールを動的に生成する)

UI

下図のUIを準備します。フォームにボタン一つを配置します。

コード

以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CreateControl
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      TextBox tb = new TextBox();
      tb.Left = 10;
      tb.Top = 64;
      tb.Width = 180;
      tb.Height = 24;
      this.Controls.Add(tb);
    }
  }
}

解説

下記コードにて、作成するコントロール(今回はTextBox)のインスタンスを作成します。
TextBox tb = new TextBox();

コントロールの位置、サイズを設定します。
tb.Left = 10;
tb.Top = 64;
tb.Width = 180;
tb.Height = 24;

フォームのControlsプロパティのAddメソッドを用いてフォームに作成したコントロールを追加します。
this.Controls.Add(tb);

実行結果

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


button1をクリックします。テキストボックスがフォームに追加されます。


文字の入力も可能です。デザイン時に設置したテキストボックスと同じように動作します。


プログラム例 (複数のコントロールを動的に生成する)

複数コントロールを作成する場合の例です。

UI

下図のUIを作成します。先のUIにButtonを一つ追加します。今回はbutton2のみ利用します。


コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CreateControlRuntime
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
      List<TextBox> clist = new List<TextBox>();

      int y = 64;
      for (int i = 0; i < 5; i++) {
        TextBox tb = new TextBox();
        tb.Top = y;
        tb.Left = 10;
        tb.Height = 24;
        tb.Width = 180;
        this.Controls.Add(tb);

        clist.Add(tb);
        y = y + 24 + 2;
      }

      clist[3].Text = "Penguin";
    }
  }
}

解説

コントロールを格納するリストのインスタンスを作成します。
List<TextBox> clist = new List<TextBox>();

forループを用いてコントロール(テキストボックス)を複数作成し、フォームに追加します。作成したコントロールはリストに追加します。
for (int i = 0; i < 5; i++) {
  TextBox tb = new TextBox();
  tb.Top = y;
  tb.Left = 10;
  tb.Height = 24;
  tb.Width = 180;
  this.Controls.Add(tb);

  clist.Add(tb);
  y = y + 24 + 2;
}

添え字をつけてリストの要素を参照することで、コントロールへアクセスできます。4番目のテキストボックスのTextプロパティを"Penguin"にします。
clist[3].Text = "Penguin";

実行結果

プロジェクトを実行します。下図のフォームが表示されます。


button2をクリックします。テキストボックスが5つ作成され、4つ目のテキストボックスに"Penguin"が入力されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2018-03-27
作成日: 2012-06-05
iPentec all rights reserverd.