아래와 같이 이미지 및 문자 색상을 나타낼 수 있는 버튼을 만드는 코드입니다.
마우스 이동 시 이벤트가 자동으로 발생되어 지정한 이미지가 나타나도록 가능합니다. (텍스트 등 필요한 기능은 직접 추가!)
![]() |
![]() |
![]() |
![]() |
프로젝트에 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;
}
}
}'C# > Windows Form' 카테고리의 다른 글
| [C# Windows Form] PrivateFontCollection 외부 폰트 파일 적용 (0) | 2025.11.28 |
|---|---|
| [C# Windows Form] FormBorderStyle None 에 대한 기본 클래스 (0) | 2025.11.28 |
| [C# Windows Form] 섬네일 만들기 (ListView, ListBox) (0) | 2025.11.17 |
| [C# Windows Form] ZipFile 다루기 - 압축 및 해제 (0) | 2025.10.06 |
| [C# Windows Form] 비동기 Custom Form 종료, 파일 열기, 프린트 등 창 닫기 (BlockingCollection - queue) (0) | 2025.09.08 |




