zoukankan      html  css  js  c++  java
  • (五十六)c#Winform自定义控件-瓶子(工业)-HZHControls

    官网

    http://www.hzhcontrols.com

    前提

    入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。

    GitHub:https://github.com/kwwwvagaa/NetWinformControl

    码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

    如果觉得写的还行,请点个 star 支持一下吧

    欢迎前来交流探讨: 企鹅群568015492 企鹅群568015492

    麻烦博客下方点个【推荐】,谢谢

    NuGet

    Install-Package HZH_Controls

    目录

    https://www.cnblogs.com/bfyx/p/11364884.html

    用处及效果

    准备工作

    依然是GDI+  不了解请先百度一下

    开始

    添加一个类UCBottle,继承UserControl

    添加几个控制属性

      1 //瓶身区域
      2         /// <summary>
      3         /// The m working rect
      4         /// </summary>
      5         Rectangle m_workingRect;
      6 
      7         /// <summary>
      8         /// The title
      9         /// </summary>
     10         string title = "瓶子1";
     11 
     12         /// <summary>
     13         /// Gets or sets the title.
     14         /// </summary>
     15         /// <value>The title.</value>
     16         [Description("标题"), Category("自定义")]
     17         public string Title
     18         {
     19             get { return title; }
     20             set
     21             {
     22                 title = value;
     23                 ResetWorkingRect();
     24                 Refresh();
     25             }
     26         }
     27 
     28         /// <summary>
     29         /// The bottle color
     30         /// </summary>
     31         private Color bottleColor = Color.FromArgb(255, 77, 59);
     32 
     33         /// <summary>
     34         /// Gets or sets the color of the bottle.
     35         /// </summary>
     36         /// <value>The color of the bottle.</value>
     37         [Description("瓶子颜色"), Category("自定义")]
     38         public Color BottleColor
     39         {
     40             get { return bottleColor; }
     41             set
     42             {
     43                 bottleColor = value;
     44                 Refresh();
     45             }
     46         }
     47 
     48         /// <summary>
     49         /// The bottle mouth color
     50         /// </summary>
     51         private Color bottleMouthColor = Color.FromArgb(105, 105, 105);
     52 
     53         /// <summary>
     54         /// Gets or sets the color of the bottle mouth.
     55         /// </summary>
     56         /// <value>The color of the bottle mouth.</value>
     57         [Description("瓶口颜色"), Category("自定义")]
     58         public Color BottleMouthColor
     59         {
     60             get { return bottleMouthColor; }
     61             set { bottleMouthColor = value; }
     62         }
     63 
     64         /// <summary>
     65         /// The liquid color
     66         /// </summary>
     67         private Color liquidColor = Color.FromArgb(3, 169, 243);
     68 
     69         /// <summary>
     70         /// Gets or sets the color of the liquid.
     71         /// </summary>
     72         /// <value>The color of the liquid.</value>
     73         [Description("液体颜色"), Category("自定义")]
     74         public Color LiquidColor
     75         {
     76             get { return liquidColor; }
     77             set
     78             {
     79                 liquidColor = value;
     80                 Refresh();
     81             }
     82         }
     83 
     84 
     85         /// <summary>
     86         /// 获取或设置控件显示的文字的字体。
     87         /// </summary>
     88         /// <value>The font.</value>
     89         /// <PermissionSet>
     90         ///   <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
     91         ///   <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
     92         ///   <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, ControlEvidence" />
     93         ///   <IPermission class="System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
     94         /// </PermissionSet>
     95         [Description("文字字体"), Category("自定义")]
     96         public override Font Font
     97         {
     98             get
     99             {
    100                 return base.Font;
    101             }
    102             set
    103             {
    104                 base.Font = value;
    105                 ResetWorkingRect();
    106                 Refresh();
    107             }
    108         }
    109 
    110         /// <summary>
    111         /// 获取或设置控件的前景色。
    112         /// </summary>
    113         /// <value>The color of the fore.</value>
    114         /// <PermissionSet>
    115         ///   <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
    116         /// </PermissionSet>
    117         [Description("文字颜色"), Category("自定义")]
    118         public override System.Drawing.Color ForeColor
    119         {
    120             get
    121             {
    122                 return base.ForeColor;
    123             }
    124             set
    125             {
    126                 base.ForeColor = value;
    127                 Refresh();
    128             }
    129         }
    130 
    131         /// <summary>
    132         /// The maximum value
    133         /// </summary>
    134         private decimal maxValue = 100;
    135 
    136         /// <summary>
    137         /// Gets or sets the maximum value.
    138         /// </summary>
    139         /// <value>The maximum value.</value>
    140         [Description("最大值"), Category("自定义")]
    141         public decimal MaxValue
    142         {
    143             get { return maxValue; }
    144             set
    145             {
    146                 if (value < m_value)
    147                     return;
    148                 maxValue = value;
    149                 Refresh();
    150             }
    151         }
    152 
    153         /// <summary>
    154         /// The m value
    155         /// </summary>
    156         private decimal m_value = 50;
    157 
    158         /// <summary>
    159         /// Gets or sets the value.
    160         /// </summary>
    161         /// <value>The value.</value>
    162         [Description(""), Category("自定义")]
    163         public decimal Value
    164         {
    165             get { return m_value; }
    166             set
    167             {
    168                 if (value <= 0 || value > maxValue)
    169                     return;
    170                 m_value = value;
    171                 Refresh();
    172             }
    173         }
    174 
    175         /// <summary>
    176         /// The m no
    177         /// </summary>
    178         private string m_NO;
    179         /// <summary>
    180         /// Gets or sets the NO.
    181         /// </summary>
    182         /// <value>The no.</value>
    183         [Description("编号"), Category("自定义")]
    184         public string NO
    185         {
    186             get { return m_NO; }
    187             set
    188             {
    189                 m_NO = value;
    190                 Refresh();
    191             }
    192         }

    重绘

      1  protected override void OnPaint(PaintEventArgs e)
      2         {
      3             base.OnPaint(e);
      4             var g = e.Graphics;
      5             g.SetGDIHigh();
      6             //写文字
      7             var size = g.MeasureString(title, Font);
      8             g.DrawString(title, Font, new SolidBrush(ForeColor), new PointF((this.Width - size.Width) / 2, 2));
      9 
     10             //画空瓶子
     11             GraphicsPath pathPS = new GraphicsPath();
     12             Point[] psPS = new Point[] 
     13             {       
     14                 new Point(m_workingRect.Left, m_workingRect.Top),
     15                 new Point(m_workingRect.Right - 1, m_workingRect.Top),
     16                 new Point(m_workingRect.Right - 1, m_workingRect.Bottom - 15),
     17                 new Point(m_workingRect.Right - 1 - m_workingRect.Width / 4, m_workingRect.Bottom),
     18                 new Point(m_workingRect.Left + m_workingRect.Width / 4, m_workingRect.Bottom),
     19                 new Point(m_workingRect.Left, m_workingRect.Bottom - 15),
     20             };
     21             pathPS.AddLines(psPS);
     22             pathPS.CloseAllFigures();
     23             g.FillPath(new SolidBrush(bottleColor), pathPS);
     24             //画液体
     25             decimal decYTHeight = (m_value / maxValue) * m_workingRect.Height;
     26             GraphicsPath pathYT = new GraphicsPath();
     27             Rectangle rectYT = Rectangle.Empty;
     28             if (decYTHeight < 15)
     29             {
     30                 PointF[] psYT = new PointF[] 
     31                 { 
     32                     new PointF((float)(m_workingRect.Left+(15-decYTHeight))+3,(float)(m_workingRect.Bottom-decYTHeight)),                   
     33                     new PointF((float)(m_workingRect.Right-(15-decYTHeight))-3,(float)(m_workingRect.Bottom-decYTHeight)),  
     34                     new PointF(m_workingRect.Right-1-m_workingRect.Width/4, m_workingRect.Bottom),
     35                     new PointF(m_workingRect.Left+m_workingRect.Width/4, m_workingRect.Bottom),
     36                 };
     37                 pathYT.AddLines(psYT);
     38                 pathYT.CloseAllFigures();
     39                 rectYT = new Rectangle((m_workingRect.Left + (15 - (int)decYTHeight)) + 3, m_workingRect.Bottom - (int)decYTHeight - 5, m_workingRect.Width - (int)(15 - decYTHeight) * 2 - 8, 10);
     40             }
     41             else
     42             {
     43                 PointF[] psYT = new PointF[] 
     44                 { 
     45                     new PointF(m_workingRect.Left,(float)(m_workingRect.Bottom-decYTHeight)),
     46                     new PointF(m_workingRect.Right-1,(float)(m_workingRect.Bottom-decYTHeight)),
     47                     new PointF(m_workingRect.Right-1,m_workingRect.Bottom-15),
     48                     new PointF(m_workingRect.Right-1-m_workingRect.Width/4, m_workingRect.Bottom),
     49                     new PointF(m_workingRect.Left+m_workingRect.Width/4, m_workingRect.Bottom),
     50                     new PointF(m_workingRect.Left,m_workingRect.Bottom-15),
     51                 };
     52                 pathYT.AddLines(psYT);
     53                 pathYT.CloseAllFigures();
     54                 rectYT = new Rectangle(m_workingRect.Left, m_workingRect.Bottom - (int)decYTHeight - 5, m_workingRect.Width, 10);
     55             }
     56 
     57             g.FillPath(new SolidBrush(liquidColor), pathYT);
     58             g.FillPath(new SolidBrush(Color.FromArgb(50, bottleMouthColor)), pathYT);
     59             //画液体面
     60             g.FillEllipse(new SolidBrush(liquidColor), rectYT);
     61             g.FillEllipse(new SolidBrush(Color.FromArgb(50, Color.White)), rectYT);
     62 
     63             //画高亮
     64             int intCount = m_workingRect.Width / 2 / 4;
     65             int intSplit = (255 - 100) / intCount;
     66             for (int i = 0; i < intCount; i++)
     67             {
     68                 int _penWidth = m_workingRect.Width / 2 - 4 * i;
     69                 if (_penWidth <= 0)
     70                     _penWidth = 1;
     71                 g.DrawLine(new Pen(new SolidBrush(Color.FromArgb(10, Color.White)), _penWidth), new Point(m_workingRect.Width / 2, m_workingRect.Top), new Point(m_workingRect.Width / 2, m_workingRect.Bottom - 15));
     72                 if (_penWidth == 1)
     73                     break;
     74             }
     75 
     76             //画瓶底
     77             g.FillEllipse(new SolidBrush(bottleColor), new RectangleF(m_workingRect.Left, m_workingRect.Top - 5, m_workingRect.Width - 2, 10));
     78             g.FillEllipse(new SolidBrush(Color.FromArgb(50, Color.White)), new RectangleF(m_workingRect.Left, m_workingRect.Top - 5, m_workingRect.Width - 2, 10));
     79             //画瓶口
     80             g.FillRectangle(new SolidBrush(bottleMouthColor), new Rectangle(m_workingRect.Left + m_workingRect.Width / 4, m_workingRect.Bottom, m_workingRect.Width / 2, 15));
     81             //画瓶颈阴影
     82             GraphicsPath pathPJ = new GraphicsPath();
     83             Point[] psPJ = new Point[] 
     84             {       
     85                 new Point(m_workingRect.Left, m_workingRect.Bottom-15),
     86                 new Point(m_workingRect.Right-1, m_workingRect.Bottom-15),
     87                 new Point(m_workingRect.Right-1-m_workingRect.Width/4, m_workingRect.Bottom),
     88                 new Point(m_workingRect.Left+m_workingRect.Width/4, m_workingRect.Bottom)               
     89             };
     90             pathPJ.AddLines(psPJ);
     91             pathPJ.CloseAllFigures();
     92             g.FillPath(new SolidBrush(Color.FromArgb(50, bottleMouthColor)), pathPJ);
     93 
     94             //写编号
     95             if (!string.IsNullOrEmpty(m_NO))
     96             {
     97                 var nosize = g.MeasureString(m_NO, Font);
     98                 g.DrawString(m_NO, Font, new SolidBrush(ForeColor), new PointF((this.Width - nosize.Width) / 2, m_workingRect.Top + 10));
     99             }
    100         }

    代码就这么多

    完整代码

      1 // ***********************************************************************
      2 // Assembly         : HZH_Controls
      3 // Created          : 2019-09-05
      4 //
      5 // ***********************************************************************
      6 // <copyright file="UCBottle.cs">
      7 //     Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
      8 // </copyright>
      9 //
     10 // Blog: https://www.cnblogs.com/bfyx
     11 // GitHub:https://github.com/kwwwvagaa/NetWinformControl
     12 // gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
     13 //
     14 // If you use this code, please keep this note.
     15 // ***********************************************************************
     16 using System;
     17 using System.Collections.Generic;
     18 using System.Linq;
     19 using System.Text;
     20 using System.Windows.Forms;
     21 using System.Drawing;
     22 using System.Drawing.Drawing2D;
     23 using System.ComponentModel;
     24 
     25 namespace HZH_Controls.Controls
     26 {
     27     /// <summary>
     28     /// Class UCBottle.
     29     /// Implements the <see cref="System.Windows.Forms.UserControl" />
     30     /// </summary>
     31     /// <seealso cref="System.Windows.Forms.UserControl" />
     32     public class UCBottle : UserControl
     33     {
     34         //瓶身区域
     35         /// <summary>
     36         /// The m working rect
     37         /// </summary>
     38         Rectangle m_workingRect;
     39 
     40         /// <summary>
     41         /// The title
     42         /// </summary>
     43         string title = "瓶子1";
     44 
     45         /// <summary>
     46         /// Gets or sets the title.
     47         /// </summary>
     48         /// <value>The title.</value>
     49         [Description("标题"), Category("自定义")]
     50         public string Title
     51         {
     52             get { return title; }
     53             set
     54             {
     55                 title = value;
     56                 ResetWorkingRect();
     57                 Refresh();
     58             }
     59         }
     60 
     61         /// <summary>
     62         /// The bottle color
     63         /// </summary>
     64         private Color bottleColor = Color.FromArgb(255, 77, 59);
     65 
     66         /// <summary>
     67         /// Gets or sets the color of the bottle.
     68         /// </summary>
     69         /// <value>The color of the bottle.</value>
     70         [Description("瓶子颜色"), Category("自定义")]
     71         public Color BottleColor
     72         {
     73             get { return bottleColor; }
     74             set
     75             {
     76                 bottleColor = value;
     77                 Refresh();
     78             }
     79         }
     80 
     81         /// <summary>
     82         /// The bottle mouth color
     83         /// </summary>
     84         private Color bottleMouthColor = Color.FromArgb(105, 105, 105);
     85 
     86         /// <summary>
     87         /// Gets or sets the color of the bottle mouth.
     88         /// </summary>
     89         /// <value>The color of the bottle mouth.</value>
     90         [Description("瓶口颜色"), Category("自定义")]
     91         public Color BottleMouthColor
     92         {
     93             get { return bottleMouthColor; }
     94             set { bottleMouthColor = value; }
     95         }
     96 
     97         /// <summary>
     98         /// The liquid color
     99         /// </summary>
    100         private Color liquidColor = Color.FromArgb(3, 169, 243);
    101 
    102         /// <summary>
    103         /// Gets or sets the color of the liquid.
    104         /// </summary>
    105         /// <value>The color of the liquid.</value>
    106         [Description("液体颜色"), Category("自定义")]
    107         public Color LiquidColor
    108         {
    109             get { return liquidColor; }
    110             set
    111             {
    112                 liquidColor = value;
    113                 Refresh();
    114             }
    115         }
    116 
    117 
    118         /// <summary>
    119         /// 获取或设置控件显示的文字的字体。
    120         /// </summary>
    121         /// <value>The font.</value>
    122         /// <PermissionSet>
    123         ///   <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
    124         ///   <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
    125         ///   <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, ControlEvidence" />
    126         ///   <IPermission class="System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
    127         /// </PermissionSet>
    128         [Description("文字字体"), Category("自定义")]
    129         public override Font Font
    130         {
    131             get
    132             {
    133                 return base.Font;
    134             }
    135             set
    136             {
    137                 base.Font = value;
    138                 ResetWorkingRect();
    139                 Refresh();
    140             }
    141         }
    142 
    143         /// <summary>
    144         /// 获取或设置控件的前景色。
    145         /// </summary>
    146         /// <value>The color of the fore.</value>
    147         /// <PermissionSet>
    148         ///   <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
    149         /// </PermissionSet>
    150         [Description("文字颜色"), Category("自定义")]
    151         public override System.Drawing.Color ForeColor
    152         {
    153             get
    154             {
    155                 return base.ForeColor;
    156             }
    157             set
    158             {
    159                 base.ForeColor = value;
    160                 Refresh();
    161             }
    162         }
    163 
    164         /// <summary>
    165         /// The maximum value
    166         /// </summary>
    167         private decimal maxValue = 100;
    168 
    169         /// <summary>
    170         /// Gets or sets the maximum value.
    171         /// </summary>
    172         /// <value>The maximum value.</value>
    173         [Description("最大值"), Category("自定义")]
    174         public decimal MaxValue
    175         {
    176             get { return maxValue; }
    177             set
    178             {
    179                 if (value < m_value)
    180                     return;
    181                 maxValue = value;
    182                 Refresh();
    183             }
    184         }
    185 
    186         /// <summary>
    187         /// The m value
    188         /// </summary>
    189         private decimal m_value = 50;
    190 
    191         /// <summary>
    192         /// Gets or sets the value.
    193         /// </summary>
    194         /// <value>The value.</value>
    195         [Description(""), Category("自定义")]
    196         public decimal Value
    197         {
    198             get { return m_value; }
    199             set
    200             {
    201                 if (value <= 0 || value > maxValue)
    202                     return;
    203                 m_value = value;
    204                 Refresh();
    205             }
    206         }
    207 
    208         /// <summary>
    209         /// The m no
    210         /// </summary>
    211         private string m_NO;
    212         /// <summary>
    213         /// Gets or sets the NO.
    214         /// </summary>
    215         /// <value>The no.</value>
    216         [Description("编号"), Category("自定义")]
    217         public string NO
    218         {
    219             get { return m_NO; }
    220             set
    221             {
    222                 m_NO = value;
    223                 Refresh();
    224             }
    225         }
    226 
    227         /// <summary>
    228         /// Initializes a new instance of the <see cref="UCBottle" /> class.
    229         /// </summary>
    230         public UCBottle()
    231         {
    232             this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    233             this.SetStyle(ControlStyles.DoubleBuffer, true);
    234             this.SetStyle(ControlStyles.ResizeRedraw, true);
    235             this.SetStyle(ControlStyles.Selectable, true);
    236             this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    237             this.SetStyle(ControlStyles.UserPaint, true);
    238             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
    239             this.SizeChanged += UCBottle_SizeChanged;
    240             this.Size = new Size(100, 150);
    241         }
    242 
    243         /// <summary>
    244         /// Handles the SizeChanged event of the UCBottle control.
    245         /// </summary>
    246         /// <param name="sender">The source of the event.</param>
    247         /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
    248         void UCBottle_SizeChanged(object sender, EventArgs e)
    249         {
    250             ResetWorkingRect();
    251         }
    252 
    253         /// <summary>
    254         /// Resets the working rect.
    255         /// </summary>
    256         private void ResetWorkingRect()
    257         {
    258             var g = this.CreateGraphics();
    259             var size = g.MeasureString(title, Font);
    260             m_workingRect = new Rectangle(0, (int)size.Height + 10, this.Width, this.Height - ((int)size.Height + 10) - 15);
    261         }
    262 
    263         /// <summary>
    264         /// 引发 <see cref="E:System.Windows.Forms.Control.Paint" /> 事件。
    265         /// </summary>
    266         /// <param name="e">包含事件数据的 <see cref="T:System.Windows.Forms.PaintEventArgs" /></param>
    267         protected override void OnPaint(PaintEventArgs e)
    268         {
    269             base.OnPaint(e);
    270             var g = e.Graphics;
    271             g.SetGDIHigh();
    272             //写文字
    273             var size = g.MeasureString(title, Font);
    274             g.DrawString(title, Font, new SolidBrush(ForeColor), new PointF((this.Width - size.Width) / 2, 2));
    275 
    276             //画空瓶子
    277             GraphicsPath pathPS = new GraphicsPath();
    278             Point[] psPS = new Point[] 
    279             {       
    280                 new Point(m_workingRect.Left, m_workingRect.Top),
    281                 new Point(m_workingRect.Right - 1, m_workingRect.Top),
    282                 new Point(m_workingRect.Right - 1, m_workingRect.Bottom - 15),
    283                 new Point(m_workingRect.Right - 1 - m_workingRect.Width / 4, m_workingRect.Bottom),
    284                 new Point(m_workingRect.Left + m_workingRect.Width / 4, m_workingRect.Bottom),
    285                 new Point(m_workingRect.Left, m_workingRect.Bottom - 15),
    286             };
    287             pathPS.AddLines(psPS);
    288             pathPS.CloseAllFigures();
    289             g.FillPath(new SolidBrush(bottleColor), pathPS);
    290             //画液体
    291             decimal decYTHeight = (m_value / maxValue) * m_workingRect.Height;
    292             GraphicsPath pathYT = new GraphicsPath();
    293             Rectangle rectYT = Rectangle.Empty;
    294             if (decYTHeight < 15)
    295             {
    296                 PointF[] psYT = new PointF[] 
    297                 { 
    298                     new PointF((float)(m_workingRect.Left+(15-decYTHeight))+3,(float)(m_workingRect.Bottom-decYTHeight)),                   
    299                     new PointF((float)(m_workingRect.Right-(15-decYTHeight))-3,(float)(m_workingRect.Bottom-decYTHeight)),  
    300                     new PointF(m_workingRect.Right-1-m_workingRect.Width/4, m_workingRect.Bottom),
    301                     new PointF(m_workingRect.Left+m_workingRect.Width/4, m_workingRect.Bottom),
    302                 };
    303                 pathYT.AddLines(psYT);
    304                 pathYT.CloseAllFigures();
    305                 rectYT = new Rectangle((m_workingRect.Left + (15 - (int)decYTHeight)) + 3, m_workingRect.Bottom - (int)decYTHeight - 5, m_workingRect.Width - (int)(15 - decYTHeight) * 2 - 8, 10);
    306             }
    307             else
    308             {
    309                 PointF[] psYT = new PointF[] 
    310                 { 
    311                     new PointF(m_workingRect.Left,(float)(m_workingRect.Bottom-decYTHeight)),
    312                     new PointF(m_workingRect.Right-1,(float)(m_workingRect.Bottom-decYTHeight)),
    313                     new PointF(m_workingRect.Right-1,m_workingRect.Bottom-15),
    314                     new PointF(m_workingRect.Right-1-m_workingRect.Width/4, m_workingRect.Bottom),
    315                     new PointF(m_workingRect.Left+m_workingRect.Width/4, m_workingRect.Bottom),
    316                     new PointF(m_workingRect.Left,m_workingRect.Bottom-15),
    317                 };
    318                 pathYT.AddLines(psYT);
    319                 pathYT.CloseAllFigures();
    320                 rectYT = new Rectangle(m_workingRect.Left, m_workingRect.Bottom - (int)decYTHeight - 5, m_workingRect.Width, 10);
    321             }
    322 
    323             g.FillPath(new SolidBrush(liquidColor), pathYT);
    324             g.FillPath(new SolidBrush(Color.FromArgb(50, bottleMouthColor)), pathYT);
    325             //画液体面
    326             g.FillEllipse(new SolidBrush(liquidColor), rectYT);
    327             g.FillEllipse(new SolidBrush(Color.FromArgb(50, Color.White)), rectYT);
    328 
    329             //画高亮
    330             int intCount = m_workingRect.Width / 2 / 4;
    331             int intSplit = (255 - 100) / intCount;
    332             for (int i = 0; i < intCount; i++)
    333             {
    334                 int _penWidth = m_workingRect.Width / 2 - 4 * i;
    335                 if (_penWidth <= 0)
    336                     _penWidth = 1;
    337                 g.DrawLine(new Pen(new SolidBrush(Color.FromArgb(10, Color.White)), _penWidth), new Point(m_workingRect.Width / 2, m_workingRect.Top), new Point(m_workingRect.Width / 2, m_workingRect.Bottom - 15));
    338                 if (_penWidth == 1)
    339                     break;
    340             }
    341 
    342             //画瓶底
    343             g.FillEllipse(new SolidBrush(bottleColor), new RectangleF(m_workingRect.Left, m_workingRect.Top - 5, m_workingRect.Width - 2, 10));
    344             g.FillEllipse(new SolidBrush(Color.FromArgb(50, Color.White)), new RectangleF(m_workingRect.Left, m_workingRect.Top - 5, m_workingRect.Width - 2, 10));
    345             //画瓶口
    346             g.FillRectangle(new SolidBrush(bottleMouthColor), new Rectangle(m_workingRect.Left + m_workingRect.Width / 4, m_workingRect.Bottom, m_workingRect.Width / 2, 15));
    347             //画瓶颈阴影
    348             GraphicsPath pathPJ = new GraphicsPath();
    349             Point[] psPJ = new Point[] 
    350             {       
    351                 new Point(m_workingRect.Left, m_workingRect.Bottom-15),
    352                 new Point(m_workingRect.Right-1, m_workingRect.Bottom-15),
    353                 new Point(m_workingRect.Right-1-m_workingRect.Width/4, m_workingRect.Bottom),
    354                 new Point(m_workingRect.Left+m_workingRect.Width/4, m_workingRect.Bottom)               
    355             };
    356             pathPJ.AddLines(psPJ);
    357             pathPJ.CloseAllFigures();
    358             g.FillPath(new SolidBrush(Color.FromArgb(50, bottleMouthColor)), pathPJ);
    359 
    360             //写编号
    361             if (!string.IsNullOrEmpty(m_NO))
    362             {
    363                 var nosize = g.MeasureString(m_NO, Font);
    364                 g.DrawString(m_NO, Font, new SolidBrush(ForeColor), new PointF((this.Width - nosize.Width) / 2, m_workingRect.Top + 10));
    365             }
    366         }
    367     }
    368 }
    View Code

    最后的话

    如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星星吧

  • 相关阅读:
    转 Xcode调试技巧 EXC_BAD_ACCESS
    qq web协议(转)
    iphone 调试技巧
    转Xcode 调试技巧 XCode调试技巧–设置全局断点快速定位问题代码所在行[zz]
    xcode 允许SVN管理项目文件
    mql4如何自定义画图
    mql相关知识
    iphone 使用委托(delegate)在不同的窗口之间传递数据
    关于同一工单中上万笔序号的一次性生成
    SharpDevelop使用心得
  • 原文地址:https://www.cnblogs.com/bfyx/p/11463252.html
Copyright © 2011-2022 走看看