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
'프로그래밍 기술 > Windows Form 응용 프로그램' 카테고리의 다른 글
4. 4 폼 구현 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
---|---|
4.3 엔진 개발 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
4. 폼과 폼 사이에 상호 작용 [Windows Forms 응용 프로그램] (3) | 2016.04.06 |
3. 2 실습: 다른 프로젝트에서 만든 컨트롤 사용하기 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
3.1.3 Form1 구현 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
3.1.1 ColorChangeEventArgs 정의 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
3. 사용자 정의 컨트롤 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
TreeView 실습 [Windows Forms 응용 프로그램] (2) | 2016.04.05 |
ListView 실습 [Windows Forms 응용 프로그램] (0) | 2016.04.05 |
ComboBox, ListBox, CheckListBox 실습 [Windows Forms 실습] (0) | 2016.04.05 |