본문 바로가기
Program Language/C#(GUI)

[C# Winform] ScrollBar와 TextBox로 RGBA 컬러 조절하기

by 토담이아빠 2023. 8. 4.

ScrollBar와 TextBox로 RGBA 컬러 조절하기

 

이번 포스팅에서는 스크롤바(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의 배경색이 변하게 됩니다.


실행초기화면

 

RGBA 조정화면

 

댓글