C#/VB.NET コードからコントロールを追加する方法

C#/VB.netでコードからフォーム上にコントロールを追加する方法について解説します。

可変するフォーム画面を作りたいけどどうやったらできるかな?

コントロールはControls.Addメソッドを利用してコードから操作することで可変するフォームを作成することができます。

目次

受講者数No.1!初心者からプロへ導く信頼のスクール

    短期間で習得可能!未経験から実践力を磨く充実のプログラム

    今なら無料相談でAmazonギフトカードがもらえる!

    コードからコントロールを追加する

     フォーム上にコントロールをコードから追加する方法は、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でコードからフォーム上にコントロールを追加する方法について解説しました。

    • コードからのコントロールには以下の操作を行います。
      1. コントロールを追加する前に、コントロールのインスタンスを作成します。
      2. Controlsプロパティを使用して、フォームにコントロールを追加します。
      3. Addメソッドに作成したコントロールのインスタンスを渡して追加します。
    • SuspendLayoutメソッドを呼び出すことで、フォームの再描画を一時停止することができます。
      これにより、複数のコントロールを一括で追加する際に、パフォーマンスを向上させることができます。
    • ResumeLayoutメソッドを呼び出すことで、フォームの再描画を再開することができます。
    • コントロールの存在チェックにはControls.Containsメソッドを使用します。
    • 追加したコントロールを自動で整列させるにはFlowLayoutPanelコントロールを使用します。

    可変するフォーム画面を作成することができました。

    可変フォームはデータベースなどと組み合わせて更新のしやすいフォーム作りをしてみるのも面白いですよ。

    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!
    目次