テキストボックスやボタンなどのウィンドウコントロールを実行時に作成するコードを紹介します。
コードでコントロールを作成することにより、コントロールを実行時に動的に作成できます。
概要
コードでコントロールを作成する場合は、コントロールのオブジェクトのインスタンスを作成し、廃止するウィンドウコントロールの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