方法: コントロールのコレクションに対して実行時にコントロールを追加または削除する

アプリケーション開発では、フォーム上のコンテナー コントロール (Panel または GroupBox コントロール、またはフォーム自体) に対してコントロールを追加したり、コントロールを削除したりする作業がよく行われます。 デザイン時に、コントロールをパネルやグループ ボックスに直接ドラッグすることができます。 実行時には、これらのコントロールは Controls コレクションを保持し、それらにどのコントロールが置かれているかを追跡します。

注意

次のコード例は、コントロールのコレクションを保持する任意のコントロールに適用されます。

プログラムを使用して、コレクションにコントロールを追加するには

  1. 追加するコントロールのインスタンスを作成します。

  2. 新しいコントロールのプロパティを設定します。

  3. 親コントロールの Controls コレクションにコントロールを追加します。

    次のコード例は、Button コントロールのインスタンスの作成方法を示したものです。 これは、Panel コントロールを持つフォームが必要であり、作成されるボタンのイベント処理メソッド NewPanelButton_Click がすでに存在している必要があります。

    Public NewPanelButton As New Button()  
    
    Public Sub AddNewControl()  
       ' The Add method will accept as a parameter any object that derives  
       ' from the Control class. In this case, it is a Button control.  
       Panel1.Controls.Add(NewPanelButton)  
       ' The event handler indicated for the Click event in the code
       ' below is used as an example. Substite the appropriate event  
       ' handler for your application.  
       AddHandler NewPanelButton.Click, AddressOf NewPanelButton_Click  
    End Sub  
    
    public Button newPanelButton = new Button();  
    
    public void addNewControl()  
    {
       // The Add method will accept as a parameter any object that derives  
       // from the Control class. In this case, it is a Button control.  
       panel1.Controls.Add(newPanelButton);  
       // The event handler indicated for the Click event in the code
       // below is used as an example. Substitute the appropriate event  
       // handler for your application.  
       this.newPanelButton.Click += new System.EventHandler(this. NewPanelButton_Click);  
    }  
    

プログラムを使用してコレクションからコントロールを削除するには

  1. イベントからイベント ハンドラーを削除します。 Visual Basic では RemoveHandler ステートメント キーワードを使用し、C# では -= 演算子を使用します。

  2. Remove メソッドを使用して、パネルの Controls コレクションから目的のコントロールを削除します。

  3. Dispose メソッドを呼び出して、コントロールによって使用されているすべてのリソースを解放します。

    Public Sub RemoveControl()  
    ' NOTE: The code below uses the instance of
    ' the button (NewPanelButton) from the previous example.  
       If Panel1.Controls.Contains(NewPanelButton) Then  
          RemoveHandler NewPanelButton.Click, AddressOf _
             NewPanelButton_Click  
          Panel1.Controls.Remove(NewPanelButton)  
          NewPanelButton.Dispose()  
       End If  
    End Sub  
    
    private void removeControl(object sender, System.EventArgs e)  
    {  
    // NOTE: The code below uses the instance of
    // the button (newPanelButton) from the previous example.  
       if(panel1.Controls.Contains(newPanelButton))  
       {  
          this.newPanelButton.Click -= new System.EventHandler(this.
             NewPanelButton_Click);  
          panel1.Controls.Remove(newPanelButton);  
          newPanelButton.Dispose();  
       }  
    }  
    

関連項目