C#/VB.netでコードからフォーム上にコントロールを追加する方法について解説します。
可変するフォーム画面を作りたいけどどうやったらできるかな?
コントロールはControls.Addメソッドを利用してコードから操作することで可変するフォームを作成することができます。
コードからコントロールを追加する
フォーム上にコントロールをコードから追加する方法は、Controlsプロパティを使用し、Addメソッドに作成したコントロールのインスタンスを渡すことで行うことができます。
- コントロールを追加する前に、フォーム上に配置したいコントロールのインスタンスを作成します。
- コントロールをフォーム上に配置するには、Controlsプロパティを使用します。
- このプロパティには、ControlCollectionクラスのインスタンスが格納されており、このクラスにはAddメソッドがあります。
- このAddメソッドに、作成したコントロールのインスタンスを渡すことで、フォーム上に配置することができます。
フォームにコントロールを追加したい場合と、削除したい場合は以下のように記述します。
//追加時
form1.Controls.Add(オブジェクト名);
//削除時
form1.Controls.Revove(オブジェクト名);
以下のサンプルでは、ボタンを押すことでラベルとテキストボックスを表示しています。
Label label = new Label();
TextBox textbox = new TextBox();
private void button1_Click(object sender, EventArgs e)
{
//追加するラベルの設定
label.Text = "追加したラベル";
label.Location = new Point(30, 100); //ラベルの位置
label.Size = new Size(300, 40);
//追加するTextBoxの設定
textbox.Text = "追加したテキストボックス";
textbox.Location = new Point(30, 160);
textbox.Size = new Size(300, 20);
//フォームへ追加
this.Controls.Add(label);
this.Controls.Add(textbox);
TextBox textBox = new TextBox();
}
Dim label As New Label()
Dim textbox As New TextBox()
Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click
'追加するラベルの設定
label.Text = "追加したラベル"
label.Location = New Point(30, 100) 'ラベルの位置
label.Size = New Size(300, 40)
'追加するTextBoxの設定
textbox.Text = "追加したテキストボックス"
textbox.Location = New Point(30, 160)
textbox.Size = New Size(300, 20)
'フォームへ追加
Me.Controls.Add(label)
Me.Controls.Add(textbox)
Dim textBox As New TextBox()
End Sub
このサンプルプログラムは、フォームに新しいコントロール(ラベルとテキストボックス)を追加する方法を示しています。
ラベルとテキストボックスのインスタンスを作成しています。
次に「button1」という名前のボタンがクリックされたときに実行されるメソッドです。このメソッドでは、作成したラベルとテキストボックスのインスタンスに対して、表示するテキスト、位置、サイズなどのプロパティを設定しています。
最後に設定したプロパティを使って、フォームにラベルとテキストボックスを追加しています。
SuspendLayoutメソッドでコントロール配置時のパフォーマンスを向上させる
SuspendLayoutメソッドは、Controlクラスに存在するメソッドで、複数のコントロールを一度に配置する際に、レイアウト処理を一時停止し、パフォーマンスを向上させることができます。
SuspendLayoutメソッドを呼び出すと、ResumeLayoutメソッドが呼び出されるまで、レイアウト処理が一時停止されます。
private void AddControls()
{
// Suspend layout
this.SuspendLayout();
// Add controls
for (int i = 0; i < 100; i++)
{
Button button = new Button();
button.Text = "Button " + i;
this.Controls.Add(button);
}
// Resume layout
this.ResumeLayout();
}
Private Sub AddControls()
' Suspend layout
Me.SuspendLayout()
' Add controls
For i As Integer = 0 To 99
Dim button As New Button()
button.Text = "Button " & i
Me.Controls.Add(button)
Next
' Resume layout
Me.ResumeLayout()
End Sub
このように、SuspendLayoutメソッドを使用して、フォームの再描画を一時停止し、コントロールを配置します。その後、ResumeLayoutメソッドを呼び出し、フォームの再描画を再開します。これにより、コントロールを追加する際のパフォーマンスが向上します。
Controlの存在チェックの方法
コントロールが存在しているかを確認するには、Controls.Containsメソッドを使用して確認できます。
if (this.Controls.Contains(textbox)) MessageBox.Show("存在を確認した");
If Me.Controls.Contains(textbox) Then MessageBox.Show("存在を確認した")
コードで追加したコントロールを自動整列させる。
FlowLayoutPanelコントロールを利用することで、コードから追加したコントロールを自動で整列させることができます。FlowLayoutPanelコントロールの使い方については以下の記事で紹介しています。
この記事のまとめ
C#/VB.netでコードからフォーム上にコントロールを追加する方法について解説しました。
- コードからのコントロールには以下の操作を行います。
- コントロールを追加する前に、コントロールのインスタンスを作成します。
- Controlsプロパティを使用して、フォームにコントロールを追加します。
- Addメソッドに作成したコントロールのインスタンスを渡して追加します。
- SuspendLayoutメソッドを呼び出すことで、フォームの再描画を一時停止することができます。
これにより、複数のコントロールを一括で追加する際に、パフォーマンスを向上させることができます。 - ResumeLayoutメソッドを呼び出すことで、フォームの再描画を再開することができます。
- コントロールの存在チェックにはControls.Containsメソッドを使用します。
- 追加したコントロールを自動で整列させるにはFlowLayoutPanelコントロールを使用します。
可変するフォーム画面を作成することができました。
可変フォームはデータベースなどと組み合わせて更新のしやすいフォーム作りをしてみるのも面白いですよ。
コメント