Windows Forms 도구 상자 컨트롤 만들기

Visual Studio 확장성 도구(VS SDK)에 포함된 Windows Forms 도구 상자 컨트롤 항목 템플릿을 사용하면 확장이 설치될 때 자동으로 추가되는 도구 상자 컨트롤을 만들 수 있습니다. 이 연습에서는 템플릿을 사용하여 다른 사용자에게 배포할 수 있는 간단한 카운터 컨트롤을 만드는 방법을 보여 줍니다.

도구 상자 컨트롤 만들기

Windows Forms 도구 상자 컨트롤 템플릿은 정의되지 않은 사용자 지정 컨트롤을 만들고 도구 상자에 컨트롤을 추가하는 데 필요한 모든 기능을 제공합니다.

Windows Forms 도구 상자 컨트롤을 사용하여 확장 만들기

  1. MyWinFormsControl라는 VSIX 프로젝트를 만듭니다. “vsix”를 검색하여 새 프로젝트 대화 상자에서 VSIX 프로젝트 템플릿을 찾을 수 있습니다.

  2. 프로젝트가 열리면 Counter라는 Windows Forms 도구 상자 컨트롤 항목 템플릿을 추가합니다. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가>새 항목을 선택합니다. 새 항목 추가 대화 상자에서 Visual C#>확장성으로 이동하여 Windows Forms 도구 상자 컨트롤을 선택합니다.

  3. 그러면 사용자 정의 컨트롤이자 도구 상자에 컨트롤을 배치하는 ProvideToolboxControlAttributeRegistrationAttribute 및 배포에 사용되는 VSIX 매니페스트의 Microsoft.VisualStudio.ToolboxControl 자산 항목이 추가됩니다.

컨트롤에 대한 사용자 인터페이스 작성

Counter 컨트롤에는 두 개의 자식 컨트롤이 필요합니다. 하나는 현재 카운트를 표시하는 Label 컨트롤이고 다른 하나는 카운트를 0으로 초기화하는 Button 컨트롤입니다. 호출자는 카운터를 프로그래밍 방식으로 증가시키므로 다른 자식 컨트롤이 필요하지 않습니다.

사용자 인터페이스를 작성하려면

  1. 솔루션 탐색기에서 Counter.cs를 두 번 클릭하여 디자이너에서 이 파일을 엽니다.

  2. Windows Forms 도구 상자 컨트롤 항목 템플릿을 추가할 때 기본적으로 포함된 여기를 클릭 단추를 제거합니다.

  3. 도구 상자에서 Label 컨트롤과 그 아래의 Button 컨트롤을 디자인 화면으로 끌어옵니다.

  4. 전체 사용자 정의 컨트롤의 크기를 150, 50픽셀로 조정하고 단추 컨트롤의 크기를 50, 20픽셀로 조정합니다.

  5. 속성 창에서 디자인 화면의 컨트롤에 대해 다음 값을 설정합니다.

    제어 속성 Value
    Label1 Text ""
    Button1 이름 btnReset
    Button1 Text Reset

사용자 정의 컨트롤 코딩

Counter 컨트롤은 카운터를 증가시키는 메서드, 카운터가 증가될 때마다 발생하는 이벤트, 초기화 단추 및 현재 카운트, 표시 텍스트 및 초기화 단추의 표시/숨김 여부를 저장하는 속성 3개를 노출합니다. ProvideToolboxControl 특성은 도구 상자 에서 Counter 컨트롤이 나타나는 위치를 결정합니다.

사용자 정의 컨트롤을 코딩하려면

  1. 양식을 두 번 클릭하여 코드 창에서 부하 이벤트 처리기를 엽니다.

  2. 이벤트 처리기 메서드 위의 컨트롤 클래스에서 다음 예제와 같이 카운터 값을 저장할 정수와 표시 텍스트를 저장할 문자열을 만듭니다.

    int currentValue;
    string displayText;
    
  3. 다음 공용 속성 선언을 만듭니다.

    public int Value {
        get { return currentValue; }
    }
    
    public string Message {
        get { return displayText; }
        set { displayText = value; }
    }
    
    public bool ShowReset {
        get { return btnReset.Visible; }
        set { btnReset.Visible = value; }
    }
    
    

    호출자는 이러한 속성에 액세스하여 카운터의 표시 텍스트를 가져와서 설정하고 초기화 단추를 표시하거나 숨길 수 있습니다. 호출자는 읽기 전용 Value 속성의 현재 값을 가져올 수 있지만 값을 직접 설정할 수는 없습니다.

  4. 컨트롤에 대한 Load 이벤트에 다음 코드를 넣습니다.

    private void Counter_Load(object sender, EventArgs e)
    {
        currentValue = 0;
        label1.Text = Message + Value;
    }
    
    

    Load 이벤트에서 레이블 텍스트를 설정하면 대상 속성이 해당 값이 적용되기 전에 로드될 수 있습니다. 생성자에서 레이블 텍스트를 설정하면 빈 레이블이 생성됩니다.

  5. 카운터를 증가시키는 다음 공용 메서드를 만듭니다.

    public void Increment()
    {
        currentValue++;
        label1.Text = displayText + Value;
        Incremented(this, EventArgs.Empty);
    }
    
    
  6. 컨트롤 클래스에 Incremented 이벤트에 대한 선언을 추가합니다.

    public event EventHandler Incremented;
    

    호출자는 이 이벤트에 처리기를 추가하여 카운터 값의 변경에 응답할 수 있습니다.

  7. 디자인 뷰로 돌아가서 초기화 단추를 두 번 클릭하여 btnReset_Click 이벤트 처리기를 생성합니다. 다음 예제와 같이 입력합니다.

    private void btnReset_Click(object sender, EventArgs e)
    {
        currentValue = 0;
        label1.Text = displayText + Value;
    }
    
    
  8. 클래스 정의 바로 위의 ProvideToolboxControl 특성 선언에서 첫 번째 매개 변수 값을 "MyWinFormsControl.Counter" 에서 "General"로 변경합니다. 도구 상자에서 컨트롤을 호스트할 항목 그룹의 이름이 설정됩니다.

    다음 예제에서는 ProvideToolboxControl 특성 및 조정된 클래스 정의를 보여 줍니다.

    [ProvideToolboxControl("General", false)]
    public partial class Counter : UserControl
    

컨트롤 테스트

도구 상자 컨트롤을 테스트하려면 먼저 개발 환경에서 테스트한 다음 컴파일된 애플리케이션에서 테스트합니다.

컨트롤을 테스트하려면

  1. F5 키를 눌러 디버깅을 시작합니다.

    이 명령은 프로젝트를 빌드하고 컨트롤이 설치된 Visual Studio의 두 번째 실험적 인스턴스를 엽니다.

  2. Visual Studio의 실험적 인스턴스에서 Windows Forms 애플리케이션 프로젝트를 만듭니다.

  3. 아직 열려 있지 않은 경우 솔루션 탐색기에서 Form1.cs를 두 번 클릭하여 디자이너에서 엽니다.

  4. 도구 상자에서 Counter 컨트롤은 일반 섹션에 표시되어야 합니다.

  5. Counter 컨트롤을 양식으로 끌어서 선택합니다. 속성 창에 Value, MessageShowReset 속성이 UserControl에서 상속된 다른 속성과 함께 표시됩니다.

  6. Message 속성을 Count:로 설정합니다.

  7. Button 컨트롤을 양식으로 끌어서 단추의 이름 및 텍스트 속성을 Test로 설정합니다.

  8. 단추를 두 번 클릭하여 코드 보기에서 Form1.cs를 열고 클릭 처리기를 만듭니다.

  9. 클릭 처리기에서 counter1.Increment()를 호출합니다.

  10. 생성자 함수에서 InitializeComponent를 호출한 후 counter1``.``Incremented +=를 입력하고 Tab 키를 두 번 누릅니다.

    Visual Studio가 counter1.Incremented 이벤트에 대한 양식 수준 처리기를 생성합니다.

  11. 이벤트 처리기에서 Throw 문을 강조 표시하고 mbox를 입력한 다음 Tab 키를 두 번 눌러 mbox 코드 조각에서 메시지 상자를 생성합니다.

  12. 다음 줄에서 다음 if/else 블록을 추가하여 초기화 단추의 표시 유형을 설정합니다.

    if (counter1.Value < 5) counter1.ShowReset = false;
    else counter1.ShowReset = true;
    
  13. F5키를 누릅니다.

    양식이 열립니다. Counter 컨트롤이 다음 텍스트를 표시합니다.

    Count: 0

  14. 테스트를 선택합니다.

    카운터가 증가하고 Visual Studio에 메시지 상자가 표시됩니다.

  15. 메시지 상자를 닫습니다.

    초기화 단추가 사라집니다.

  16. 매번 메시지 상자를 닫아 카운터가 5에 도달할 때까지 테스트를 선택합니다.

    초기화 단추가 다시 나타납니다.

  17. 재설정을 선택합니다.

    카운터가 0으로 초기화됩니다.

다음 단계

도구 상자 컨트롤을 작성할 때 Visual Studio는 프로젝트의 \bin\debug\ 폴더에 ProjectName.vsix라는 파일을 만듭니다. 네트워크 또는 웹 사이트에 .vsix 파일을 업로드하여 컨트롤을 배포할 수 있습니다. 사용자가 .vsix 파일을 열면 사용자의 컴퓨터에서 컨트롤이 설치되고 Visual Studio 도구 상자에 추가됩니다. 또는 도구>확장 및 업데이트 대화 상자에서 탐색하여 찾을 수 있도록 .vsix 파일을 Visual Studio Marketplace에 업로드할 수 있습니다.