이번 포스팅에서는 스크롤바(ScrollBar)와 텍스트박스(TextBox)를 이용하여 RGBA(레드, 그린, 블루, 알파) 컬러를 조절하는 방법을 살펴보겠습니다. 이 컬러 조절기는 사용자가 스크롤바 또는 텍스트박스 입력으로 Red, Green, Blue, Alpha 값을 조절하면서 실시간으로 변경되는 색상을 확인할 수 있습니다.
폼디자인
컨트롤을 다음과 같이 배치합니다. 사용 컨트롤은 Panel, Label, ScrollBar, TextBox입니다.
각 ScrollBar의 이름(Name)은 hScrollBar_R, hScrollBar_G, hScrollBar_B, hScrollBar_A이고, TextBox의 이름은 textBox_R, textBox_G, textBox_B, textBox_A로 설정합니다. 그리고 각 ScrollBar의 Maximum과 Minimum 속성값을 264와 0으로 설정합니다. Maximum값이 255가 아닌 이유는 LargeChange값이 디폴트(default)로 10으로 설정되어 있기 때문입니다. Maximum값을 255로 설정하고 싶다면 LargeChange값을 1로 설정해야 합니다. LargeChange값은 스크롤막대를 클릭했을 때 변하는 값인데 이 값이 10일 경우 실제 스크롤값을 출력할 경우 246까지 밖에 안 나옵니다. 마지막으로 색상이 표현되는 Panel의 이름은 "panel_screen"으로 설정했습니다.
그 다음은 이벤트를 등록해야 합니다. 속성창의 이벤트 탭을 클릭하여 각 ScrollBar의 Scroll 이벤트 이름을 "scroll_RGBA"로 동일하게 등록합니다. 마찬가지로 TextBox들의 TextChanged 이벤트 이름 또한 "textchanged_RGBA"로 동일하게 등록합니다.
Form1.cs 작성하기
등록한 이벤트 함수가 있는 Form1.cs내용을 아래와 같이 작성합니다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace WindowsFormsEX
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 초기 배경을 검정색으로.
panel_screen.BackColor = Color.FromArgb(255, 0, 0, 0);
// 초기 입력값 셋팅
textBox_R.Text = 0.ToString();
textBox_G.Text = 0.ToString();
textBox_B.Text = 0.ToString();
textBox_A.Text = 255.ToString();
}
private void scroll_RGBA(object sender, ScrollEventArgs e)
{
// RGBA 값 추출
int red = hScrollBar_R.Value;
int green = hScrollBar_G.Value;
int blue = hScrollBar_B.Value;
int alpha = hScrollBar_A.Value;
// 색상 변경
panel_screen.BackColor = Color.FromArgb(alpha, red, green, blue);
// RGBA 값 출력
textBox_R.Text = red.ToString();
textBox_G.Text = green.ToString();
textBox_B.Text = blue.ToString();
textBox_A.Text = alpha.ToString();
}
private void textchanged_RGBA(object sender, EventArgs e)
{
// 공백은 허용하지 않음
if (textBox_R.Text != "" && textBox_G.Text != ""
&& textBox_B.Text != "" && textBox_A.Text != "")
{
// 255이상 입력되면 255로 고정
int red = int.Parse(textBox_R.Text);
if (red > 255)
{
red = 255;
textBox_R.Text = red.ToString();
}
int green = int.Parse(textBox_G.Text);
if (green > 255)
{
green = 255;
textBox_G.Text = green.ToString();
}
int blue = int.Parse(textBox_B.Text);
if (blue > 255)
{
blue = 255;
textBox_B.Text = blue.ToString();
}
int alpha = int.Parse(textBox_A.Text);
if (alpha > 255)
{
alpha = 255;
textBox_A.Text = alpha.ToString();
}
// 색상변경
panel_screen.BackColor = Color.FromArgb(alpha, red, green, blue);
// RGBA값 출력
hScrollBar_R.Value = red;
hScrollBar_G.Value = green;
hScrollBar_B.Value = blue;
hScrollBar_A.Value = alpha;
}
}
}
}
실행결과
위 코드를 실행하고 스크롤을 움직이거나 텍스박스에 적절한 값을 입력하면 Pannel의 배경색이 변하게 됩니다.
'Program Language > C#(GUI)' 카테고리의 다른 글
[C# Winform] MaskedTextBox를 활용한 "약속 일정 도우미" 제작 (5) | 2023.09.17 |
---|---|
[C# Winform] 성적 계산기 만들기 (11) | 2023.07.28 |
[C# Winform] 로그인 창 만들기 (9) | 2023.03.09 |
[C# WinForm] RadioButton 사용하기 (11) | 2023.03.03 |
[C# WinForm] CheckBox 사용하기 (11) | 2023.02.20 |
댓글