이제 프로젝트에 사용자 정의 컨트롤 ColorSelectorControl을 추가하고 자식 컨트롤을 배치하세요.
다음은 ColorSelectControl의 자식 컨트롤 Name과 형식입니다.
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 색상 값 조절 |
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 을 표시하는 것을 볼 수 있습니다.