您的足迹:首页 > DreamSkin >DreamSkin自定义美化控件-RoundButton圆角矩形按钮控件

DreamSkin自定义美化控件-RoundButton圆角矩形按钮控件

QQ截图20160713115804.png

 

RoundButton圆角矩形控件

 

控件圆角可以控制,动态,颜色,文字全部采用配置的方法

属性:

 属性名称 属性说明 
SkinFillColor  按钮填充颜色
SkinFrameColor   按钮边框颜色
SkinButtonBackColor   按钮除外的背景色,需要与按钮的背景颜色一致,默认为白色
SkinHoverColor   鼠标移动上面渐变颜色
SkinInnerTextFont   显示文字字体
SkinInnerTextForeColor   显示文字颜色
SkinInnerTextAlignment   水平方向文字对齐标准
SkinInnerTextLineAlignment   垂直方向文字对齐标准
SkinInnerText   显示文字
SkinCornerRadius   按钮圆角角度,默认为8

 

相关源码:

        Graphics g;
        private Color SaveFillColor;
        private Color SaveFrameColor;

        public RoundButton()
        {
            InitializeComponent();
            this.MouseHover += BuyButton_MouseHover;
            this.MouseLeave += BuyButton_MouseLeave;
        }

        private void RoundButton_Load(object sender, EventArgs e)
        {
            SaveFillColor = SkinFillColor;
            SaveFrameColor = SkinFrameColor;

            if (SkinInnerTextFont == null)
                SkinInnerTextFont = this.Font;
        }

        private void RoundButton_Paint(object sender, PaintEventArgs e)
        {
            g = e.Graphics;
            Draw();
        }

        /// <summary>
        /// 绘制Button颜色和文字
        /// </summary>
        private void Draw()
        {
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            Brush backBrush = new SolidBrush(SkinButtonBackColor);
            g.FillRectangle(backBrush, new Rectangle(0, 0, this.Width, this.Height));
            FillRoundRectangle(g, SkinFillColor, new Rectangle(0, 0, this.Width - 1, this.Height - 1), SkinCornerRadius);
            Brush brush = new SolidBrush(SkinFrameColor);
            DrawRoundRectangle(g, new Pen(brush, 1), new Rectangle(0, 0, this.Width - 1, this.Height - 1), 8);
            if (!String.IsNullOrEmpty(this.SkinInnerText))
            {
                StringFormat sf = new StringFormat();
                sf.Alignment = SkinInnerTextAlignment;
                sf.LineAlignment = SkinInnerTextLineAlignment;

                Brush writeBrush = new SolidBrush(innerTextForeColor);
                g.DrawString(this.SkinInnerText, SkinInnerTextFont, writeBrush, this.ClientRectangle, sf);
            }
        }

        /// <summary>
        /// 鼠标移动到控件上方
        /// </summary>
        void BuyButton_MouseHover(object sender, EventArgs e)
        {
            g = this.CreateGraphics();
            SkinFillColor = SkinHoverColor;
            SkinFrameColor = SkinHoverColor;
            Draw();
        }

        /// <summary>
        /// 鼠标移出到控件上方
        /// </summary>
        void BuyButton_MouseLeave(object sender, EventArgs e)
        {
            g = this.CreateGraphics();
            SkinFillColor = SaveFillColor;
            SkinFrameColor = SaveFrameColor;
            Draw();
        }

        private void RoundButton_MouseDown(object sender, MouseEventArgs e)
        {
            g = this.CreateGraphics();
            SkinFrameColor = SaveFillColor;
            Draw();
        }

        private void RoundButton_MouseUp(object sender, MouseEventArgs e)
        {
            g = this.CreateGraphics();
            SkinFrameColor = SkinHoverColor;
            Draw();
        }

        #region 绘制圆角矩形
        private static void DrawRoundRectangle(Graphics g, Pen pen, Rectangle rect, int cornerRadius)
        {
            using (GraphicsPath path = CreateRoundedRectanglePath(rect, cornerRadius))
            {
                g.DrawPath(pen, path);
            }
        }
        private static void FillRoundRectangle(Graphics g, Color color, Rectangle rect, int cornerRadius)
        {
            using (GraphicsPath path = CreateRoundedRectanglePath(rect, cornerRadius))
            {
                Brush brush = new SolidBrush(color);
                g.FillPath(brush, path);
            }
        }
        internal static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)
        {
            GraphicsPath roundedRect = new GraphicsPath();
            roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90);
            roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2, rect.Y);
            roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90);
            roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2);
            roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90);
            roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom);
            roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90);
            roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.X, rect.Y + cornerRadius * 2);
            roundedRect.CloseFigure();
            return roundedRect;
        }

        #endregion
 

本博客所有文章如无特别注明均为原创。作者:cc复制或转载请以超链接形式注明转自 我的博客
原文地址《DreamSkin自定义美化控件-RoundButton圆角矩形按钮控件

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)