프로그래밍 기술/Windows Form 응용 프로그램

3.1.2 ColorSelectControl 정의 [Windows Forms 응용 프로그램]

언제나휴일 2016. 4. 6. 11:56
반응형

3.1.2 ColorSelectControl 정의

 

 이제 프로젝트에 사용자 정의 컨트롤 ColorSelectorControl을 추가하고 자식 컨트롤을 배치하세요.


사용자 정의 컨트롤 추가

[그림 3.3] ColorSelectorControl 추가


사용자 정의 컨트롤 실습 자식 컨트롤 배치

[그림 3.04] 자식 컨트롤 배치

 

No

Name

컨트롤 형식

설명

1

spcon

SpritContainer

컨트롤 배치 목적 (2개의 패널로 구성)

2

lb_red

Label

Red 색상 정보 표시

3

lb_green

Label

Green 색상 정보 표시

4

lb_blue

Label

Blue 색상 정보 표시

5

tbar_red

TrackBar

Red 색상 값 조절

6

tbar_green

TrackBar

Green 색상 값 조절

7

tbar_blue

TrackBar

Blue 색상 값 조절

[ 3.1] ColorSelectorControl의 자식 컨트롤

 

public partial class ColorSelectorControl : UserControl

{

 먼저 ColorChangeEventHandler 형식의 이벤트를 멤버로 추가합니다.

    public event ColorChangeEventHandler ColorChanged=null;

 컨트롤을 사용하는 곳에서 색상을 가져오기 할 수 있게 속성을 정의합니다.

    public int Red

    {

        get;

        private set;

   }

    public int Green

    {

        get;

        private set;

    }

    public int Blue

    {

        get;

        private set;

    }


 컨트롤이 Load할 때와 각 색상의 트랙바를 스크롤할 때 패널의 배경 색상을 바꿔주고 색상 정보를 표시할 Label의 속성을 설정하는 작업을 수행합니다. 컨트롤의 Load 이벤트, 각 트랙바의 스크롤 이벤트 핸들러를 등록하여 색상을 변경하는 메서드를 호출하세요. 물론 색상을 변경하는 메서드를 추가하세요.

private void ColorSelectorControl_Load(object sender, EventArgs e)

{

    SetColor(COLOR_ELEM.CE_ALL);

}

private void tbar_red_Scroll(object sender, EventArgs e)

{

    SetColor(COLOR_ELEM.CE_RED);

}

private void tbar_green_Scroll(object sender, EventArgs e)

{

    SetColor(COLOR_ELEM.CE_GREEN);

}

private void tbar_blue_Scroll(object sender, EventArgs e)

{

    SetColor(COLOR_ELEM.CE_BLUE);

}

 

색상을 설정하는 메서드 SetColor를 구현합시다.

private void SetColor(COLOR_ELEM ce)

{

 각 트랙바의 Value 속성으로 색상 속성을 설정합니다.

    Red = tbar_red.Value;

    Green = tbar_green.Value;

    Blue = tbar_blue.Value;

 또한 색상 정보 표시 레이블의 Text 속성도 설정합니다.

    lb_red.Text = tbar_red.Value.ToString();

    lb_green.Text = tbar_green.Value.ToString();

    lb_blue.Text = tbar_blue.Value.ToString();

 색상을 시각적으로 인식할 수 있게 spcon Panel1의 배경 색을 설정합니다.

    spcon.Panel1.BackColor = Color.FromArgb(Red, Green, Blue);

 만약 색상 변경 이벤트 핸들러가 null이 아니면 색상 변경한 사실을 알리기 위해 이벤트 핸들로를 호출합니다.

    if (ColorChanged != null)

    {

        ColorChanged(this, new ColorChangeEventArgs(Red, Green, Blue, ce));

    }

}

 

 

 그리고 ColorSelectorControl 개체를 소유하는 곳에서 프로그램 방식으로 색상을 변경할 수 있게 메서드를 제공합니다. 여기에서는 세 가지 색상을 모두 변경하는 메서드와 단일 색상 값을 변경하는 메서드를 제공합시다.

public void ChangeColor(int r, int g, int b)

{

    tbar_red.Value = (byte)r;

    tbar_green.Value = (byte)g;

    tbar_blue.Value = (byte)b;

    SetColor(COLOR_ELEM.CE_ALL);

}

public void ChangeRed(int r)

{

    tbar_red.Value = (byte)r;

    SetColor(COLOR_ELEM.CE_RED);

}

public void ChangeGreen(int g)

{

    tbar_green.Value = (byte)g;

    SetColor(COLOR_ELEM.CE_GREEN);

}

public void ChangeBlue(int b)

{

    tbar_blue.Value = (byte)b;

    SetColor(COLOR_ELEM.CE_BLUE);

}

 

ColorSelectorControl.cs

using System;

using System.Drawing;

using System.Windows.Forms;

 

namespace Ex_사용자_정의_컨트롤

{

    public partial class ColorSelectorControl : UserControl

    {

        public event ColorChangeEventHandler ColorChanged=null;

        public int Red

        {

            get;

            private set;

        }

        public int Green

        {

            get;

            private set;

        }

        public int Blue

        {

            get;

            private set;

        }

        public ColorSelectorControl()

        {

            InitializeComponent();

        }

        private void ColorSelectorControl_Load(object sender, EventArgs e)

        {

            SetColor(COLOR_ELEM.CE_ALL);

        }

        private void tbar_red_Scroll(object sender, EventArgs e)

        {

            SetColor(COLOR_ELEM.CE_RED);

        }

        private void tbar_green_Scroll(object sender, EventArgs e)

        {

            SetColor(COLOR_ELEM.CE_GREEN);

        }

 

        private void tbar_blue_Scroll(object sender, EventArgs e)

        {

            SetColor(COLOR_ELEM.CE_BLUE);

        }

        private void SetColor(COLOR_ELEM ce)

        {

            Red = tbar_red.Value;

            Green = tbar_green.Value;

            Blue = tbar_blue.Value;

            lb_red.Text = tbar_red.Value.ToString();

            lb_green.Text = tbar_green.Value.ToString();

            lb_blue.Text = tbar_blue.Value.ToString();

            spcon.Panel1.BackColor = Color.FromArgb(Red, Green, Blue);

            if (ColorChanged != null)

            {

                ColorChanged(this, new ColorChangeEventArgs(Red, Green, Blue, ce));

            }

        }

        public void ChangeColor(int r, int g, int b)

        {

            tbar_red.Value = (byte)r;

            tbar_green.Value = (byte)g;

            tbar_blue.Value = (byte)b;

            SetColor(COLOR_ELEM.CE_ALL);

        }

        public void ChangeRed(int r)

        {

            tbar_red.Value = (byte)r;

            SetColor(COLOR_ELEM.CE_RED);

        }

        public void ChangeGreen(int g)

        {

            tbar_green.Value = (byte)g;

            SetColor(COLOR_ELEM.CE_GREEN);

        }

        public void ChangeBlue(int b)

        {

            tbar_blue.Value = (byte)b;

            SetColor(COLOR_ELEM.CE_BLUE);

        }

    }

}

 

 빌드한 후 Form1을 선택한 후 도구 상자를 확인하면 ColorSelectorControl 을 표시하는 것을 볼 수 있습니다.


도구 상자 

[그림 3.5] 도구 상자의 ColorSelectorControl

반응형