아래와 같이 이미지 및 문자 색상을 나타낼 수 있는 버튼을 만드는 코드입니다.

마우스 이동 시 이벤트가 자동으로 발생되어 지정한 이미지가 나타나도록 가능합니다. (텍스트 등 필요한 기능은 직접 추가!)


 

프로젝트에 Button을 상속받은 아래의 클래스를 생성 후 "프로젝트 빌드" 를 해주어야 사용 가능해집니다.

그리고 Image_Disable, Image_Disable_Color ... 에 대해 이미지 및 텍스트 색상 지정을 해주면 끝!

이미지 등록하는 모습

 

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public class MyButton : Button
    {
        public Image Image_Normal //초기 이미지
        {
            get
            {
                return image_Normal;
            }
            set
            {
                image_Normal = value;
                this.BackgroundImage = value; //디자이너에서 초기 이미지 변경 시 수정되도록 추가.
            }
        }
        private Image image_Normal;

        public Image Image_Hover { get; set; } //마우스 포커싱 이미지
        public Image Image_Press { get; set; } //마우스 누를시 이미지
        public Image Image_Disable { get; set; } //비활성화 이미지
        public Color Image_Normal_Color { get; set; } = Color.Black; //이미지 초기 글자색
        public Color Image_Hover_Color { get; set; } = Color.Black; //이미지 포커싱 글자색
        public Color Image_Press_Color { get; set; } = Color.White; //마우스 누를 시 글자색
        public Color Image_Disable_Color { get; set; } = Color.Black; //비활성화 글자색

        public new bool Enabled //활성화/비활성화 여부에 따라서 이미지 및 글자색 지정
        {
            get
            {
                return base.Enabled;
            }
            set
            {
                base.Enabled = value;

                if (value)
                {
                    this.BackgroundImage = Image_Normal;
                    this.ForeColor = Image_Normal_Color;
                }
                else
                {
                    this.BackgroundImage = Image_Disable;
                    this.ForeColor = Image_Disable_Color;
                }
            }
        }

        private bool isMouseDown;

        public MyButton()
        {
            this.FlatStyle = FlatStyle.Flat;
            this.FlatAppearance.BorderSize = 0;
            this.FlatAppearance.MouseOverBackColor = Color.Transparent; //배경 투명
            this.FlatAppearance.MouseDownBackColor = Color.Transparent; //배경 투명
            this.FlatAppearance.CheckedBackColor = Color.Transparent; //배경 투명
            this.BackColor = Color.Transparent; //배경 투명

            this.BackgroundImageLayout = ImageLayout.Zoom; //이미지 보여주는 형태

            this.MouseMove += MyButton_MouseMove;
            this.MouseDown += MyButton_MouseDown;
            this.MouseLeave += MyButton_MouseLeave;
            this.MouseUp += MyButton_MouseUp;
        }

        private void MyButton_MouseMove(object sender, EventArgs e)
        {
            if (isMouseDown)
            {
                return;
            }

            SetBackgroundImage(Image_Hover);
            SetForegroundColor(Image_Hover_Color);
        }

        private void MyButton_MouseLeave(object sender, EventArgs e)
        {
            SetBackgroundImage(Image_Normal);
            SetForegroundColor(Image_Normal_Color);
        }

        private void MyButton_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left) //왼쪽 버튼이 아니면 무시
            {
                return;
            }

            isMouseDown = true;
            SetBackgroundImage(Image_Press);
            SetForegroundColor(Image_Press_Color);
        }

        private void MyButton_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left) //왼쪽 버튼이 아니면 무시
            {
                return;
            }

            isMouseDown = false;
            SetBackgroundImage(Image_Normal);
            SetForegroundColor(Image_Normal_Color);
        }

        private void SetBackgroundImage(Image image)
        {
            if (this.Enabled == false)
            {
                return;
            }

            this.BackgroundImage = image;
        }

        private void SetForegroundColor(Color color)
        {
            if (this.Enabled == false)
            {
                return;
            }

            this.ForeColor = color;
        }
    }
}

+ Recent posts