爱洋酱

导航

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颜色值与十六进制颜色码转换工具]
  
第一次写博客,有哪里不对的地方望指正,共同进步,希望这篇文章会对你有帮助~

  

 


 

 


 

posted on 2020-10-13 22:24  爱洋酱  阅读(1804)  评论(0编辑  收藏  举报