반응형
그림자(Shadow) + 그라디언트(Gradient) 배경 라벨(Label)
- 그림자 색상, 위치 지정 가능
- 그라디언트 색상, 방향 지정 가능
ShadowLabel.cs
using System;
using System.ComponentModel;
using System.Collections;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace ShadowLabelTest {
[ToolboxItem(true)]
public class ShadowLabel : Label
{
private bool _drawGradient = true;
private Color _startColor = Color.White;
private Color _endColor = Color.LightSkyBlue;
private float _angle = 0;
private bool _drawShadow = true;
private float _yOffset = 1;
private float _xOffset = 1;
private Color _shadowColor = Color.Black;
public ShadowLabel() {
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e) {
//base.OnPaint (e);
Rectangle rectText = this.ClientRectangle;
Rectangle rectShadow = new Rectangle(rectText.Left + (int)_xOffset, rectText.Top + (int)_yOffset, rectText.Width, rectText.Height);
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
if (_drawGradient == true) {
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, this.Width, this.Height), _startColor, _endColor, _angle, true);
e.Graphics.FillRectangle(brush, 0, 0, this.Width, this.Height);
}
//정렬값
TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; ;
if(this.TextAlign == ContentAlignment.BottomCenter) {
flags = TextFormatFlags.Bottom | TextFormatFlags.HorizontalCenter;
} else if(this.TextAlign == ContentAlignment.BottomLeft) {
flags = TextFormatFlags.Bottom | TextFormatFlags.Left;
} else if(this.TextAlign == ContentAlignment.BottomRight) {
flags = TextFormatFlags.Bottom | TextFormatFlags.Right;
} else if(this.TextAlign == ContentAlignment.MiddleCenter) {
flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter;
} else if(this.TextAlign == ContentAlignment.MiddleLeft) {
flags = TextFormatFlags.VerticalCenter | TextFormatFlags.Left;
} else if(this.TextAlign == ContentAlignment.MiddleRight) {
flags = TextFormatFlags.VerticalCenter | TextFormatFlags.Right;
} else if(this.TextAlign == ContentAlignment.TopCenter) {
flags = TextFormatFlags.Top | TextFormatFlags.HorizontalCenter;
} else if(this.TextAlign == ContentAlignment.TopLeft) {
flags = TextFormatFlags.Top | TextFormatFlags.Left;
} else if(this.TextAlign == ContentAlignment.TopRight) {
flags = TextFormatFlags.Top | TextFormatFlags.Right;
}
//그림자 그리기
if(_drawShadow == true) {
TextRenderer.DrawText(e.Graphics, Text, this.Font, rectShadow, this._shadowColor, flags);
}
//텍스트 그리기
TextRenderer.DrawText(e.Graphics, Text, this.Font, rectText, this.ForeColor, flags);
}
[Category("Gradient"), Description("그라디언트 사용여부"), DefaultValue(true)]
public bool DrawGradient {
get { return this._drawGradient; }
set { this._drawGradient = value; this.Invalidate(); }
}
[Category("Gradient"), Description("그라디언트 시작 색상"), DefaultValue(typeof(Color), "Color.White")]
public Color StartColor {
get { return this._startColor; }
set { this._startColor = value; this.Invalidate(); }
}
[Category("Gradient"), Description("그라디언트 끝 색상"), DefaultValue(typeof(Color), "Color.LightSkyBlue")]
public Color EndColor {
get { return this._endColor; }
set { this._endColor = value; this.Invalidate(); }
}
[Category("Gradient"), Description("그라디언트 방향"), DefaultValue(0)]
public float Angle {
get { return this._angle; }
set { this._angle = value; this.Invalidate(); }
}
[Category("Drop Shadow"), Description("그림자 사용여부"), DefaultValue(true)]
public bool DrawShadow {
get { return this._drawShadow; }
set { this._drawShadow = value; this.Invalidate(); }
}
[Category("Drop Shadow"), Description("그림자 X 너비"), DefaultValue(1)]
public float XOffset {
get { return this._xOffset; }
set { this._xOffset = value; this.Invalidate(); }
}
[Category("Drop Shadow"), Description("그림자 Y 너비"), DefaultValue(1)]
public float YOffset {
get { return this._yOffset; }
set { this._yOffset = value; this.Invalidate(); }
}
[Category("Drop Shadow"), Description("그림자 색상"), DefaultValue(typeof(System.Drawing.Color), "Color.Black")]
public Color ShadowColor {
get { return this._shadowColor; }
set { this._shadowColor = value; this.Invalidate(); }
}
private void InitializeComponent() {
this.ForeColor = Color.LightSkyBlue;
}
}
}
프로젝트 소스 다운↓↓↓
반응형
'윈폼(Winform)' 카테고리의 다른 글
C# DateTimePicker(날짜, 시간 선택) (0) | 2021.11.18 |
---|---|
C# 타이머(Timer) (0) | 2021.11.18 |
C# UI Thread Crash 방지(InvokeRequired) (0) | 2021.11.18 |
C# 스레드(매개변수) 실행, 동기화(Lock, Monitor) (0) | 2021.11.18 |
C# 비동기 실행(async, await), 비동기에서 UI처리 (0) | 2021.11.18 |
최근댓글