연습: C#을 사용하여 Windows Forms 컨트롤에서 상속

C#을 사용하여 상속을 통해 강력한 사용자 지정 컨트롤을 만들 수 있습니다. 상속을 통해 표준 Windows Forms 컨트롤의 모든 고유 기능을 유지하면서 사용자 지정 기능을 통합하는 컨트롤을 만들 수 있습니다. 이 연습에서는 ValueButton이라는 간단한 상속된 컨트롤을 만듭니다. 이 단추는 표준 Windows Forms Button 컨트롤에서 기능을 상속하며 ButtonValue라는 사용자 지정 속성을 노출합니다.

프로젝트 만들기

새 프로젝트를 만들 때는 루트 네임스페이스, 어셈블리 이름 및 프로젝트 이름을 설정하기 위해 이름을 지정하고 기본 구성 요소가 올바른 네임스페이스에 있는지 확인합니다.

ValueButtonLib 컨트롤 라이브러리 및 ValueButton 컨트롤을 만들려면

  1. Visual Studio에서 새 Windows Forms 컨트롤 라이브러리 프로젝트를 만들고 이름을 ValueButtonLib로 지정합니다.

    프로젝트 이름, ValueButtonLib는 기본적으로 루트 네임스페이스에도 할당됩니다. 루트 네임스페이스는 어셈블리에서 구성 요소의 이름을 정규화하는 데 사용됩니다. 예를 들어 두 어셈블리에서 ValueButton이라는 구성 요소를 제공하면 ValueButtonLib.ValueButton을 사용하여 ValueButton 구성 요소를 지정할 수 있습니다. 자세한 내용은 네임스페이스를 참조하세요.

  2. 솔루션 탐색기에서 UserControl1.cs를 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 이름 바꾸기를 선택합니다. 파일 이름을 ValueButton.cs로 변경합니다. 코드 요소 'UserControl1'에 대한 모든 참조 이름을 변경할지 묻는 메시지가 표시되면 단추를 클릭합니다.

  3. 솔루션 탐색기에서 ValueButton.cs를 마우스 오른쪽 단추로 클릭하고 코드 보기를 선택합니다.

  4. class 문 줄, public partial class ValueButton을 찾고 이 컨트롤이 상속하는 유형을 UserControl에서 Button로 변경합니다. 이렇게 하면 상속된 컨트롤이 Button 컨트롤의 모든 기능을 상속받을 수 있습니다.

  5. 솔루션 탐색기에서 ValueButton.cs 노드를 열어 디자이너에서 생성한 코드 파일인 ValueButton.Designer.cs를 표시합니다. 코드 편집기에서 이 파일을 엽니다.

  6. InitializeComponent 메서드를 찾고 AutoScaleMode 속성을 할당하는 줄을 제거합니다. 이 속성은 Button 컨트롤에 없습니다.

  7. 파일 메뉴에서 모두 저장을 선택하여 프로젝트를 저장합니다.

    참고

    비주얼 디자이너는 더 이상 사용할 수 없습니다. Button 컨트롤은 고유한 그리기를 수행하므로 디자이너에서 해당 모양을 수정할 수 없습니다. 코드를 수정하지 않는 한, 시각적 표현은 상속받은 원본 클래스(즉, Button)와 정확하게 일치합니다. UI 요소가 없는 구성 요소를 디자인 화면에 계속 추가할 수 있습니다.

상속된 컨트롤에 속성 추가

상속된 Windows Forms 컨트롤의 한 가지 가능한 용도는 표준 Windows Forms 컨트롤과 모양 및 느낌이 동일하지만 사용자 지정 속성을 노출하는 컨트롤을 만드는 것입니다. 이 섹션에서는 ButtonValue라는 속성을 컨트롤에 추가합니다.

Value 속성을 추가하려면

  1. 솔루션 탐색기에서 ValueButton.cs를 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 코드 보기를 클릭합니다.

  2. class 문을 찾습니다. { 바로 뒤에 다음 코드를 입력합니다.

    // Creates the private variable that will store the value of your
    // property.
    private int varValue;
    // Declares the property.
    public int ButtonValue
    {
       // Sets the method for retrieving the value of your property.
       get
       {
          return varValue;
       }
       // Sets the method for setting the value of your property.
       set
       {
          varValue = value;
       }
    }
    

    이 코드는 ButtonValue 속성을 저장 및 검색할 메서드를 설정합니다. get 문은 반환된 값을 private 변수 varValue에 저장된 값으로 설정하고 set 문은 value 키워드를 사용하여 private 변수의 값을 설정합니다.

  3. 파일 메뉴에서 모두 저장을 선택하여 프로젝트를 저장합니다.

컨트롤 테스트

컨트롤은 독립 실행형 프로젝트가 아니며 컨테이너에서 호스팅해야 합니다. 컨트롤을 테스트하려면 컨트롤을 실행할 테스트 프로젝트를 제공해야 합니다. 또한 컨트롤을 빌드(컴파일)하여 컨트롤에서 테스트 프로젝트에 액세스할 수 있도록 해야 합니다. 이 섹션에서는 컨트롤을 테스트하고 Windows Form에서 테스트합니다.

컨트롤을 빌드하려면

빌드 메뉴에서 솔루션 빌드를 클릭합니다. 컴파일러 오류 또는 경고 없이 빌드에 성공해야 합니다.

테스트 프로젝트를 만들려면

  1. 파일 메뉴에서 추가를 가리킨 후 새 프로젝트를 클릭하여 새 프로젝트 추가 대화 상자를 엽니다.

  2. Windows 노드를 선택하고 Visual C# 노드 아래에서 Windows Forms 애플리케이션을 클릭합니다.

  3. 이름 상자에 Test를 입력합니다.

  4. 솔루션 탐색기에서 테스트 프로젝트에 대한 참조 노드를 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 참조 추가를 선택하면 참조 추가 대화 상자가 표시됩니다.

  5. 프로젝트로 레이블이 지정된 탭을 클릭합니다. ValueButtonLib 프로젝트가 프로젝트 이름 아래에 나열됩니다. 프로젝트를 두 번 클릭하여 테스트 프로젝트에 참조를 추가합니다.

  6. 솔루션 탐색기에서 Test를 마우스 오른쪽 단추로 클릭한 후 빌드를 선택합니다.

폼에 컨트롤을 추가하려면

  1. 솔루션 탐색기에서 Form1.cs를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 뷰 디자이너를 선택합니다.

  2. 도구 상자에서 ValueButtonLib 구성 요소를 선택합니다. ValueButton을 두 번 클릭합니다.

    ValueButton이 폼에 나타납니다.

  3. ValueButton을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 속성을 선택합니다.

  4. 속성 창에서 이 컨트롤의 속성을 점검합니다. ButtonValue라는 추가 속성이 있는 것을 제외하고, 표준 단추에 노출된 속성과 동일한 것을 확인할 수 있습니다.

  5. ButtonValue 속성을 5로 설정합니다.

  6. 도구 상자모든 Windows Forms 탭에서 레이블를 두 번 클릭하여 양식에 Label 컨트롤을 추가합니다.

  7. 폼 가운데에 레이블을 다시 배치합니다.

  8. valueButton1을 두 번 클릭합니다.

    코드 편집기valueButton1_Click 이벤트가 열립니다.

  9. 다음 코드 행을 삽입합니다.

    label1.Text = valueButton1.ButtonValue.ToString();
    
  10. 솔루션 탐색기에서 Test를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 시작 프로젝트로 설정을 선택합니다.

  11. 디버그 메뉴에서 디버깅 시작을 선택합니다.

    Form1이 나타납니다.

  12. valueButton1을 클릭합니다.

    숫자 '5'가 label1에 표시되며 상속된 컨트롤의 ButtonValue 속성이 valueButton1_Click 메서드를 통해 label1에 전달되었음을 보여 줍니다. 따라서 ValueButton 컨트롤은 표준 Windows Forms 단추의 모든 기능을 상속하지만 추가 사용자 지정 속성을 노출합니다.

참고 항목