Share via


방법: 기존 Windows Forms 컨트롤에서 상속

기존 컨트롤의 기능을 확장하려는 경우 상속을 통해 기존 컨트롤에서 파생된 컨트롤을 만들 수 있습니다. 기존 컨트롤에서 상속하는 경우 해당 컨트롤의 모든 기능 및 시각적 속성을 상속합니다. 예를 들어 Button에서 상속한 컨트롤을 만드는 중이었다면 새 컨트롤은 표준 Button 컨트롤처럼 생기고 정확하게 그처럼 작동합니다. 그런 다음 사용자 지정 메서드 및 속성의 구현을 통해 새 컨트롤의 기능을 확장하거나 수정할 수 있습니다. 일부 컨트롤에서 OnPaint 메서드를 재정의하여 상속된 컨트롤의 시각적 모양을 변경할 수도 있습니다.

상속된 컨트롤을 만들려면

  1. Visual Studio에서 새 Windows Forms 애플리케이션 프로젝트를 만듭니다.

  2. 프로젝트 메뉴에서 새 항목 추가를 선택합니다.

    새 항목 추가 대화 상자가 나타납니다.

  3. 새 항목 추가 대화 상자에서 사용자 지정 컨트롤을 두 번 클릭합니다.

    새 사용자 지정 컨트롤을 프로젝트에 추가합니다.

  4. 다음을 사용 중인 경우:

    • Visual Basic을 사용 중이면 솔루션 탐색기의 맨 위에서 모든 파일 표시를 클릭합니다. CustomControl1.vb를 확장한 다음 코드 편집기에서 CustomControl1.Designer.vb를 엽니다.
    • C#을 사용 중이면 코드 편집기에서 CustomControl1.cs를 엽니다.
  5. Control에서 상속한 클래스 선언을 찾습니다.

  6. 기본 클래스를 상속하려는 컨트롤로 변경합니다.

    예를 들어 Button에서 상속하려면 다음과 같이 클래스 선언을 변경합니다.

    Partial Class CustomControl1
        Inherits System.Windows.Forms.Button
    
    public partial class CustomControl1 : System.Windows.Forms.Button
    
  7. Visual Basic을 사용하는 경우 저장하고 CustomControl1.Designer.vb를 닫습니다. 코드 편집기에서 CustomControl1.vb를 엽니다.

  8. 컨트롤이 통합하는 사용자 지정 메서드 또는 속성을 구현합니다.

  9. 컨트롤의 그래픽 모양을 수정하려면 OnPaint 메서드를 재정의합니다.

    참고

    OnPaint를 재정의해도 모든 컨트롤의 모양을 수정할 수는 없습니다. 모든 그리기가 Windows에서 수행된 컨트롤(예: TextBox)은 OnPaint 메서드를 호출하지 않기 때문에 사용자 지정 코드를 사용하지 않습니다. 수정하려는 특정 컨트롤에 대한 도움말 설명서를 참조하여 OnPaint 메서드를 사용할 수 있는지 확인합니다. 모든 Windows Form 컨트롤의 목록은 Windows Forms에서 사용할 컨트롤을 참조하세요. 컨트롤이 OnPaint를 멤버 메서드로 나열하지 않는 경우 이 메서드를 재정의하여 해당 모양을 변경할 수 없습니다. 사용자 지정 그리기에 대한 자세한 내용은 사용자 지정 컨트롤 그리기 및 렌더링을 참조하세요.

    Protected Overrides Sub OnPaint(ByVal e As _
       System.Windows.Forms.PaintEventArgs)
       MyBase.OnPaint(e)
       ' Insert code to do custom painting.
       ' If you want to completely change the appearance of your control,
       ' do not call MyBase.OnPaint(e).
    End Sub
    
    protected override void OnPaint(PaintEventArgs pe)
    {
       base.OnPaint(pe);
       // Insert code to do custom painting.
       // If you want to completely change the appearance of your control,
       // do not call base.OnPaint(pe).
    }
    
  10. 컨트롤을 저장하고 테스트합니다.

참고 항목