winform按钮封装(样式及特效)
最近在做一个由winform和wpf技术组成的erp系统,目前工作是美化前端控件,这篇文章主要讲一下winform封装button按钮的样式,做到一个全局统一的效果。
首先我们要知道,改变按钮样式等操作,使用到的事件是button按钮的 Paint 事件,在重绘控件时发生
1 private static void P_Paint(object sender, PaintEventArgs e) 2 { 3 Button button = sender as Button; 4 Rectangle rectangle = new Rectangle(0, 0, button.Width - 1, button.Height - 1); 5 //这里可以根据具体需求,设置不同的颜色 6 Brush brushes = new SolidBrush(Color.FromArgb(0,120,255));//界面按钮的初始颜色 7 Brush brushbtn = new SolidBrush(Color.FromArgb(200,201,204));//禁用按钮字体按钮颜色 8 Brush brushborder = new SolidBrush(Color.FromArgb(220,223,230));//禁用按钮字体按钮边框 9 Brush brushsec = new SolidBrush(Color.FromArgb(158,157,160));//次按钮的字体颜色 10 Brush brushsecbr = new SolidBrush(Color.FromArgb(220, 223, 230));//次按钮的边框颜色 11 12 if (bnt == button && flagMouse != 0)//判断是否有指针经过 13 { 14 if (flagMouse == 1) 15 { 16 brushes = new SolidBrush(Color.FromArgb(7,143,253));//鼠标经过时候的颜色 17 } 18 else 19 { 20 brushes = new SolidBrush(Color.FromArgb(0x1E, 0x5D, 0xB0)); 21 } 22 } 23 if (button.Focused) 24 { 25 brushes = new SolidBrush(Color.FromArgb(30,102,246));//点击时按钮的颜色 26 } 27 if (!button.Enabled) 28 { 29 brushes = brushesDel = brushesVedioChm = new SolidBrush(Color.FromArgb(244,244,245));//按钮被禁用时的颜色 30 } 31 32 //这里做一个没有背景色的按钮 33 Pen pen = new Pen(brushsecbr); 34 e.Graphics.Clear(Color.White);//把按钮清理成白色底色的按钮 35 e.Graphics.DrawRectangle(pen, rectangle);//这一步是绘制按钮边框的颜色 36 e.Graphics.DrawString(button.Text, button.Font, brushsec, rectangle, new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });//这里设置的是字体和对齐方式等属性 37 38 //设置有背景颜色,直接填充已经设置好的Brush即可 39 e.Graphics.Clear(Color.White); 40 e.Graphics.FillRectangle(brushes, rectangle); 41 e.Graphics.DrawString(button.Text, button.Font, Brushes.White, rectangle, new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }); 42 }
其中flagMouse字段需要在事件 MouseEnter、MouseLeave、MouseDown中进行调整,比如鼠标经过字体加粗,这个设置就可以在事件MouseEnter中进行设置
还有两个需要分享的知识点,由于界面风格设计是设计发图片给我,我按照做的,有些单位转换这里记录一下
1.比如button中 Margin、Size、FontSize属性的单位都是像素单位(pt),但是设计图里的单位是(px),需要计算一下:
pt = px * 3 / 4 (也就是:pt=px 乘以 3/4)
2.颜色转换,十六进制颜色码转为RGB颜色值;也就是上面 Color.FromArgb(244,244,245) 指定的颜色 需要RGB的值,例:
十六进制颜色码 = #CC00FF 转换后的RGB颜色值=204,0,255
网上类似的转换网站有很多,大家有需要可以搜一下 [RGB颜色值与十六进制颜色码转换工具]
第一次写博客,有哪里不对的地方望指正,共同进步,希望这篇文章会对你有帮助~