/// <summary> /// 绘制边框 /// </summary> /// <param name="graphics">GDI+ 绘图图面</param> /// <param name="rect">存储一组整数,共四个,表示一个矩形的位置和大小</param> /// <param name="roundStyle">圆角的样式</param> /// <param name="radius">圆角弧度大小</param> /// <param name="borderColor">边框颜色</param> public static void DrawBorder(Graphics graphics, Rectangle rect, AuroraRoundStyle roundStyle, int radius, Color borderColor) { if (rect.Width <= 0 || rect.Height <= 0 || graphics == null) { return; } rect.Width -= 2; rect.Height -= 2; using (GraphicsPath path = CreateGraphicsPath(rect, radius, roundStyle, false)) { using (Pen pen = new Pen(borderColor)) { graphics.DrawPath(pen, path); } } }
/// <summary> /// 创建指定样式的GraphicsPath /// </summary> /// <param name="rect">存储一组整数,共四个,表示一个矩形的位置和大小</param> /// <param name="radius">圆角弧度大小</param> /// <param name="roundStyle">圆角的样式</param> /// <param name="correction">是否把矩形长宽减 1,以便画出边框</param> /// <returns>建立的路径</returns> public static GraphicsPath CreateGraphicsPath(Rectangle rect, int radius, AuroraRoundStyle roundStyle, bool correction = true) { GraphicsPath path = new GraphicsPath(); int radiusCorrection = correction ? 1 : 0; switch (roundStyle) { case AuroraRoundStyle.None: path.AddRectangle(rect); break; case AuroraRoundStyle.All: path.AddArc(rect.X, rect.Y, radius, radius, 180, 90); path.AddArc(rect.Right - radius - radiusCorrection, rect.Y, radius, radius, 270, 90); path.AddArc(rect.Right - radius - radiusCorrection, rect.Bottom - radius - radiusCorrection, radius, radius, 0, 90); path.AddArc(rect.X, rect.Bottom - radius - radiusCorrection, radius, radius, 90, 90); break; case AuroraRoundStyle.Left: path.AddArc(rect.X, rect.Y, radius, radius, 180, 90); path.AddLine(rect.Right - radiusCorrection, rect.Y, rect.Right - radiusCorrection, rect.Bottom - radiusCorrection); path.AddArc(rect.X, rect.Bottom - radius - radiusCorrection, radius, radius, 90, 90); break; case AuroraRoundStyle.LeftTop: path.AddArc(rect.X, rect.Y, radius, radius, 180, 90); break; case AuroraRoundStyle.LeftBottom: path.AddArc(rect.X, rect.Bottom - radius - radiusCorrection, radius, radius, 90, 90); break; case AuroraRoundStyle.Right: path.AddArc(rect.Right - radius - radiusCorrection, rect.Y, radius, radius, 270, 90); path.AddArc(rect.Right - radius - radiusCorrection, rect.Bottom - radius - radiusCorrection, radius, radius, 0, 90); path.AddLine(rect.X, rect.Bottom - radiusCorrection, rect.X, rect.Y); break; case AuroraRoundStyle.RightTop: path.AddArc(rect.Right - radius - radiusCorrection, rect.Y, radius, radius, 270, 90); break; case AuroraRoundStyle.RightBottom: path.AddArc(rect.Right - radius - radiusCorrection, rect.Bottom - radius - radiusCorrection, radius, radius, 0, 90); break; case AuroraRoundStyle.Top: path.AddArc(rect.X, rect.Y, radius, radius, 180, 90); path.AddArc(rect.Right - radius - radiusCorrection, rect.Y, radius, radius, 270, 90); path.AddLine(rect.Right - radiusCorrection, rect.Bottom - radiusCorrection, rect.X, rect.Bottom - radiusCorrection); break; case AuroraRoundStyle.Bottom: path.AddArc(rect.Right - radius - radiusCorrection, rect.Bottom - radius - radiusCorrection, radius, radius, 0, 90); path.AddArc(rect.X, rect.Bottom - radius - radiusCorrection, radius, radius, 90, 90); path.AddLine(rect.X, rect.Y, rect.Right - radiusCorrection, rect.Y); break; } path.CloseFigure(); //这句很关键,缺少会没有左边线。 return(path); }
/// <summary> /// 绘制边框 /// </summary> /// <param name="graphics">GDI+ 绘图图面</param> /// <param name="rect">存储一组整数,共四个,表示一个矩形的位置和大小</param> /// <param name="roundStyle">圆角的样式</param> /// <param name="radius">圆角弧度大小</param> public static void DrawBorder(Graphics graphics, Rectangle rect, AuroraRoundStyle roundStyle, int radius) { DrawBorder(graphics, rect, roundStyle, radius, Color.LightGray); }