方法 : コントロールのコレクションに対して実行時にコントロールを追加または削除する
アプリケーション開発における一般的なタスクの 1 つに、フォーム上のコンテナー コントロール (Panel や GroupBox などのコントロール、またはフォーム自体) へのコントロールの追加および削除があります。 デザイン時には、パネルまたはグループ ボックスにコントロールを直接ドラッグできます。 実行時には、これらのコンテナー コントロールは Controls コレクションを保持します。それにより、現在どのコントロールが含まれているかを追跡します。
注意
次のコード例は、内部にコントロールのコレクションを保持するすべてのコントロールに適用されます。
プログラムによって、コレクションにコントロールを追加するには
追加するコントロールのインスタンスを作成します。
新規コントロールのプロパティを設定します。
このコントロールを親コントロールの 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. Substite the appropriate event // handler for your application. this.newPanelButton.Click += new System.EventHandler(this. NewPanelButton_Click); }
プログラムによって、コレクションからコントロールを削除するには
イベントからイベント ハンドラーを削除します。 Visual Basic では、RemoveHandler ステートメント キーワードを使用し、Visual C# では、-= 演算子 (C# リファレンス) を使用します。
Remove メソッドを使用して、パネルの Controls コレクションから目的のコントロールを削除します。
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(); } }