다음을 통해 공유


방법: 런타임에 컨트롤 컬렉션에서 컨트롤 추가 또는 제거

애플리케이션 개발에서 일반적인 태스크는 컨트롤 추가 및 컨트롤을 양식의 컨테이너 컨트롤에서 제거하는 것입니다(예: 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();  
       }  
    }  
    

참고 항목