본문 바로가기
C#

C# .NET 사용자 정의 컨트롤 만들기

by Sudarii 2024. 1. 25.
728x90

1. 사용자 정의 컨트롤이란 ? 

C# .NET에서 사용자 정의 컨트롤은 일련의 기능을 캡슐화하고 Windows Forms 또는 ASP.NET 응용 프로그램에 쉽게 추가할 수 있는 재사용 및 사용자 지정이 가능한 구성 요소입니다. 사용자 컨트롤을 사용하면 개발자는 특정 UI(사용자 인터페이스) 및 기능 집합을 하나의 독립된 단위로 캡슐화하여 유지 관리가 가능한 모듈식 코드를 만들 수 있습니다.

 

2. 사용자 정의 컨트롤 만들기

새 항목 추가하기 > 사용자정의 컨트롤(windows Forms)  (wpf도 할줄 알면 사용하면 된다, 방법은 똑같다.)

 

 

사진과 같이 라벨 + 텍스트박스를 추가하였다.

 

    public partial class test : UserControl
    {
        public test()
        {
            InitializeComponent();
            this.Size = new System.Drawing.Size(100, 20);
            this.Font = new Font("굴림", 9);
            this.MinimumSize = new System.Drawing.Size(100, 20);
            this.MaximumSize = new System.Drawing.Size(166, 20);
        }


        [Category("Test")]
        public string LabelText
        {
            get
            {
                return this.label1.Text;
            }
            set
            {
                this.label1.Text = value;
            }
        }


        [Category("Test")]
        public string TextBoxText
        {
            get
            {
                return this.textBox1.Text;
            }
            set
            {
                this.textBox1.Text = value;
            }
        }


        public enum KIND
        {
            text1 = 1,
            test2 = 2,
            test3 = 3,  
        }
        [Category("Test"), Description("test1 = 1, test2 = 2, test3 = 3  등등 메모")]
        public KIND Kind { get; set; }
    }

 

전체 소스는 이렇다

 

 

빌드 하면 도구상자에서 내가 만든 test 컨트롤을 사용할 수 있게 된다.

 

this.Size = new System.Drawing.Size(100, 20);
this.Font = new Font("굴림", 9);
this.MinimumSize = new System.Drawing.Size(100, 20);
this.MaximumSize = new System.Drawing.Size(166, 20);

 test 컨트롤의 기본 사이즈, 폰트 등을 설정 한다.

[Category("Test")]
public string LabelText
{
    get
    {
        return this.label1.Text;
    }
    set
    {
        this.label1.Text = value;
    }
}


[Category("Test")]
public string TextBoxText
{
    get
    {
        return this.textBox1.Text;
    }
    set
    {
        this.textBox1.Text = value;
    }
}

 

Category  는  속성에서 해당 텍스트로 그룹화를 하기 위해 사용 한다.

LabelText, TextBoxText 에  get, set 기능을 부여한다.

 

test 컨트롤을 2개 추가 하였고 하나의 속성만 변경 하였다.

 

위와 같이 LabelText : 라벨,  TextBoxText : 텍스트박스 의 속성을 부여하게 되면 

사용자 정의 컨트롤에 적용이 된다.

 

public enum KIND
{
    text1 = 1,
    test2 = 2,
    test3 = 3,  
}
[Category("Test"), Description("test1 = 1, test2 = 2, test3 = 3  등등 메모")]
public KIND Kind { get; set; }

 

속성창에서 콤보박스를 사용 하기 위해 사용한다.

Description 에 적은 것은 속성창 최 하단에 설명으로 나타난다.

[Description("값변경대면"), Category("이벤트")] 
public event EventHandler ValueChange;

private void EditValueChanged(object sender, EventArgs e)
{
    if (ValueChange != null)
    {
        Invoke(ValueChange, null);
    }
}

와 같이 이벤트를 만들어서 적용 시킬 수 도 있다.

 

728x90