반응형

라운드된 외곽선이 있는 커스텀 라벨 컨트롤
- 네 귀퉁이 별로 각각 라운드 여부를 지정 가능
- 라운드 너비, 배경 색상, 외곽선 색상/두께 변경 가능
RoundLabel.cs
using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; namespace RoundBorderLabel { public class RoundLabel :Label { public int cornerRadius = 15; //라운드 너비 public Color borderColor = Color.DarkGray;//외곽선 색상 public int borderWidth = 1;//외곽선 두께 public Color backColor = Color.LightGray;//배경 색상 public bool isFillLeftTop = false;//왼쪽위 사각으로 채우기(라운드 적용X) public bool isFillRightTop = false;//오른쪽위 사각으로 채우기(라운드 적용X) public bool isFillLeftBtm = false;//왼쪽아래 사각으로 채우기(라운드 적용X) public bool isFillRightBtm = false;//오른쪽아래 사각으로 채우기(라운드 적용X) //int diminisher = 1; public RoundLabel() { this.DoubleBuffered = true; } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); using(var graphicsPath = _getRoundRectangle(this.ClientRectangle)) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; var brush = new SolidBrush(backColor); var pen = new Pen(borderColor, borderWidth); e.Graphics.FillPath(brush, graphicsPath); e.Graphics.DrawPath(pen, graphicsPath); TextRenderer.DrawText(e.Graphics, Text, this.Font, this.ClientRectangle, this.ForeColor); } } private GraphicsPath _getRoundRectangle(Rectangle rectangle) { GraphicsPath path = new GraphicsPath(); //path.AddArc(rectangle.X, rectangle.Y, cornerRadius, cornerRadius, 180, 90); int left = rectangle.X; int top = rectangle.Y; int right = rectangle.X + rectangle.Width - borderWidth; int bottom = rectangle.Y + rectangle.Height - borderWidth; if(isFillLeftTop) {//좌상 path.AddLine(left, top + cornerRadius, left, top); path.AddLine(left, top, left + cornerRadius, top); } else { path.AddArc(rectangle.X, rectangle.Y, cornerRadius, cornerRadius, 180, 90); } if(isFillRightTop) {//우상 path.AddLine(right - cornerRadius, top, right, top); path.AddLine(right, top, right, top + cornerRadius); } else { path.AddArc(rectangle.X + rectangle.Width - cornerRadius - borderWidth, rectangle.Y, cornerRadius, cornerRadius, 270, 90); } if(isFillRightBtm) {//우하 path.AddLine(right, bottom - cornerRadius, right, bottom); path.AddLine(right, bottom, right - cornerRadius, bottom); } else { path.AddArc(rectangle.X + rectangle.Width - cornerRadius - borderWidth, rectangle.Y + rectangle.Height - cornerRadius - borderWidth, cornerRadius, cornerRadius, 0, 90); } if(isFillLeftBtm) {//좌하 path.AddLine(left + cornerRadius, bottom, left, bottom); path.AddLine(left, bottom, left, bottom - cornerRadius); } else { path.AddArc(rectangle.X, rectangle.Y + rectangle.Height - cornerRadius - borderWidth, cornerRadius, cornerRadius, 90, 90); } path.CloseAllFigures(); return path; } } }
사용
roundLabel2.borderWidth = 2; roundLabel2.borderColor = Color.Red; roundLabel2.backColor = Color.LightYellow; roundLabel3.borderColor = Color.LightGreen; roundLabel3.backColor = Color.LightGreen; roundLabel4.isFillLeftTop = true; roundLabel4.isFillRightTop = true; roundLabel4.isFillLeftBtm = true; roundLabel4.isFillRightBtm = true; roundLabel4.borderColor = Color.DarkBlue; roundLabel4.backColor = Color.LightBlue; roundLabel5.cornerRadius = 30; roundLabel5.isFillLeftBtm = true; roundLabel5.isFillRightBtm = true; roundLabel5.borderWidth = 2; roundLabel5.borderColor = Color.DarkCyan; roundLabel5.backColor = Color.AntiqueWhite; roundLabel6.cornerRadius = 30; roundLabel6.isFillRightTop = true; roundLabel6.isFillRightBtm = true; roundLabel6.borderColor = Color.DarkKhaki; roundLabel6.backColor = Color.LightCoral; roundLabel7.cornerRadius = 50; roundLabel8.cornerRadius = 30; roundLabel8.borderColor = Color.Black; roundLabel8.backColor = Color.Transparent; roundLabel9.cornerRadius = 30; roundLabel9.borderColor = Color.Transparent; roundLabel9.backColor = Color.Transparent;
프로젝트 소스 다운↓↓↓
RoundBorderLabel.zip
0.02MB
반응형
'윈폼(Winform)' 카테고리의 다른 글
C# DataTable DataRow 데이터 가져오기 (1) | 2021.11.18 |
---|---|
C# DataBase(Mysql, Maria) 접속, Select/Execute Query (0) | 2021.11.18 |
C# Crystal Report 예제(편집, 인쇄) (1) | 2021.11.17 |
C# 언어 지역화 하기(Multi-Language) (0) | 2021.11.17 |
C# 실행파일에 폰트 포함 (1) | 2021.11.14 |
최근댓글