티스토리 뷰



사용자 컨트롤(User Control)은 비주얼스튜디오에서 윈도우 폼 응용 제작 과정에 활용할 수 있도록 도구 상자를 통해 기본적으로 제공하는 다양한 컨트롤과 같이 부품처럼 여러 폼이나 또는 다른 응용에서 간편하게 재사용 할 수 있도록 한것입니다. 윈도우 폼을 만들듯이 사용자가 어렵지 않게 제작할 수 있습니다. 공통적으로 자주 사용하는 것이 있다면 사용자 컨트롤로 만들어 둔다면 재사용성을 높이고 프로그램 개발의 효율성을 높이는데 기여할 수 있을 것입니다.

사용자 컨트롤은 *.DLL 형태로 배포해서 다른 프로그램에서 손쉽게 사용할 수 있도록 클래스 라이브러리 프로젝트에 작성하는 방법이 있습니다. 이 방법은 여러개의 사용자 컨트롤을 하나의 패키지로 배포하는데 용이한 방법입니다. 또다른 방법은 윈도우 폼 응용에 포함시키는 방법으로 이번 포스팅에서는 윈도우 폼 응용에 사용자 컨트롤을 추가하는 방법을 사용하고자 합니다.


프로젝트의 컨텍스트 메뉴>추가>사용자 정의 컨트롤을 선택합니다.


사용자 컨트롤의 이름을 적절하게 입력하고 [추가] 버튼을 누르면 사용자 컨트롤을 위한 코드를 생성합니다.


사용자 컨트롤은 위의 그림과 같이 윈도우 폼처럼 영역을 표시하여 텍스트 박스나 버튼등을 배치하는 디자인을 사용할 수 있으며 속성, 메소드, 이벤트등도 적용할 수 있습니다. 예제에서는 레이블, 텍스트박스, 버튼 컨트롤 각 1개씩으로 구성한 컨트롤로 레이블을 속성을 통해 변경할 수 있도록 합니다. 또한 상한, 하한 값을 속성으로 지정해 놓으면 입력값에 대한 자동 검사를 수행하는 컨트롤을 제작합니다. 컨트롤에 값을 설정하거나 읽을수 있는 속성을 추가하여 컨트롤에 포함되어 있는 텍스트 박스에 대한 직접 조작이 없어도 동작할 수 있도록 합니다.


우선은 사용자 컨트롤을 간단하게 만들어 보고 그것을 사용했을때 어떤 결과를 보이는지를 맛보기 위하여 위의 그림과 같이 레이블, 텍스트박스, 버튼 컨트롤을 추가하여 저장합니다.


사용자 컨트롤의 기본 인터페이스를 작성했으면 프로젝트의 컨텍스트 메뉴를 통해서 프로젝트를 빌드합니다. 이렇게 빌드해야 사용자 컨트롤을 윈도우 폼이나 다른 응용에 활용할 수 있습니다.


사용자 컨트롤을 사용할 준비가 되었다면 디자이너로 윈도우 폼 편집 상태에서 도구상자를 열면 위의 그림과 같이 작성한 사용자 컨트롤을 확인할 수 있습니다. 물론 레이블이나 버튼과 같은 컨트롤처럼 선택하여 폼 내부에 사용할 수 있습니다. 만약 클래스 라이브러리 프로젝트 형태로 사용자 컨트롤을 작성했다면 빌드후의 *.DLL을 프로젝트 참조로 추가하면 내부 컨트롤 처럼 도구상자에서 해당 사용자 컨트롤들을 확인할 수 있습니다.


도구상자에서 사용자 컨트롤을 선택하여 위의 그림과 같이 컨트롤을 추가합니다. 각 사용자 컨트롤은 하나의 개별적인 단위로 우측에서 속성을 변경하거나 이벤트를 추가할 수 있습니다. 물론 컨트롤 단위로 복사 및 붙여넣기도 가능합니다. 

Public Class UserControl1
    Property LabelText() As String
        Get
            Return Label1.Text
        End Get
        Set(ByVal LblText As String)
            Label1.Text = LblText
        End Set
    End Property
End Class

사용자 컨트롤의 코드 편집창을 열어 위와 같이 레이블의 텍스트를 다루는 속성을 추가합니다. 속성을 정의 하는 코드의 구조는 "Property" 구문에서 해당 속성의 데이터 타입을 "As" 구문으로 지정하고 Get 블럭으로 속성 읽기에 대한 동작을 기술하고 Set 블럭으로 속성 저장에 대한 과정을 기술하며 "End Property" 구문으로 블럭을 닫으면 됩니다. 코드의 내용은 속성값과 레이블 컨트롤을 단순 연결하는 구조입니다. 


속성을 추가한 다음에는 사용자 컨트롤을 포함하고 있는 프로젝트를 반드시 "빌드"하고 다음 작업으로 이어가야 합니다. 속성이 정상적으로 추가되면 위의 그림과 같이 사용자 컨트롤을 선택하면 우측 속성 창에 추가한 속성이 등장하고 값 확인과 설정도 가능해 집니다. 이와 같은 방식으로 텍스트 박스의 값을 연결하는 속성과 값의 하한/상한을 관리하는 속성을 추가합니다.

    Private _minval As Double = 0
    Private _maxval As Double = 65535
    Private _value As Double = 0
    Property Value() As Double
        Get
            Return _value
        End Get
        Set(ByVal inval As Double)
            _value = inval
            TextBox1.Text = inval.ToString()
        End Set
    End Property

    Property minval() As Double
        Get
            Return _minval
        End Get
        Set(ByVal val As Double)
            _minval = val
        End Set
    End Property

    Property maxval() As Double
        Get
            Return _maxval
        End Get
        Set(ByVal val As Double)
            _maxval = val
        End Set
    End Property

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim _prevval As Double = _value
        Dim chkerr As Boolean = False
        Try
            _value = Double.Parse(TextBox1.Text)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "숫자로 변환할 수 없습니다!")
            chkerr = True
        End Try
        If _value < minval Then
            MessageBox.Show("최소값보다 작습니다!")
            chkerr = True
        End If
        If _value > maxval Then
            MessageBox.Show("최대값보다 큽니다!")
            chkerr = True
        End If
        If chkerr = True Then
            _value = _prevval
            TextBox1.Text = _prevval.ToString()
        End If
    End Sub

위의 코드처러 사용자 컨트롤 내부의 이벤트 처리도 가능하지만 컨트롤 자체를 클릭했을때의 이벤트 처리등도 가능합니다. 또한 사용자 컨트롤 내부에 "Public" 범위로 메소드를 작성하면 컨트롤 외부에서 간편하게 사용할 수 있는 메소드를 추가할 수 있습니다. 또한 컨트롤 자체적인 이벤트를 Event 구문을 이용해서 정의하고 RaiseEvent를 통해서 발생시킬 수 있습니다. 지금까지 살펴본것처럼 사용자 컨트롤은 윈도우 폼 응용의 생산성을 극대화 시켜줄 수 있는 매우 편리한 요소입니다. 적극 활용할 필요가 있습니다.


댓글
댓글쓰기 폼