(八十七)c#Winform自定义控件-朝上的瓶子

官网

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

目录

http://www.hzhcontrols.com/blog-63.html

用处及效果

(八十七)c#Winform自定义控件-朝上的瓶子_第1张图片

准备工作

之前的瓶子是朝下的,这里扩展一下 朝上

(五十六)c#Winform自定义控件-瓶子(工业)

开始

增加一个属性

         private  Direction direction = Direction.Down;
 
         [Description( "瓶子方向,默认朝下" ), Category( "自定义" )]
         public  Direction Direction
         {
             get  return  direction; }
             set
             {
                 direction = value;
                 Refresh();
             }
         }

重绘里面判断朝上的代码

  else
             {
                 //写文字
                 var  size = g.MeasureString(title, Font);
                 g.DrawString(title, Font,  new  SolidBrush(ForeColor),  new  PointF(( this .Width - size.Width) / 2,  this .Height - size.Height - 2));
                 //画空瓶子
                 GraphicsPath pathPS =  new  GraphicsPath();
                 Point[] psPS =  new  Point[] 
                 {       
                     new  Point(m_workingRect.Left + m_workingRect.Width / 4, m_workingRect.Top),
                     new  Point(m_workingRect.Right - 1- m_workingRect.Width / 4, m_workingRect.Top),
                     new  Point(m_workingRect.Right - 1, m_workingRect.Top + 15),
                     new  Point(m_workingRect.Right - 1, m_workingRect.Bottom),
                     new  Point(m_workingRect.Left , m_workingRect.Bottom),
                     new  Point(m_workingRect.Left, m_workingRect.Top + 15),
                 };
                 pathPS.AddLines(psPS);
                 pathPS.CloseAllFigures();
                 g.FillPath( new  SolidBrush(bottleColor), pathPS);
                 //画液体
                 decimal  decYTHeight = (m_value / maxValue) * m_workingRect.Height;
                 GraphicsPath pathYT =  new  GraphicsPath();
                 Rectangle rectYT = Rectangle.Empty;
                 if  (decYTHeight > m_workingRect.Height - 15)
                 {
                     PointF[] psYT =  new  PointF[] 
                    
                         new  PointF(( float )(m_workingRect.Left+(decYTHeight-(m_workingRect.Height-15)))+3,( float )(m_workingRect.Bottom-decYTHeight)),                   
                         new  PointF(( float )(m_workingRect.Right-(decYTHeight-(m_workingRect.Height-15)))-3,( float )(m_workingRect.Bottom-decYTHeight)),  
                         new  PointF(m_workingRect.Right-1, m_workingRect.Top+15),
                         new  PointF(m_workingRect.Right-1, m_workingRect.Bottom),
                         new  PointF(m_workingRect.Left, m_workingRect.Bottom),
                         new  PointF(m_workingRect.Left, m_workingRect.Top+15),
                     };
                     pathYT.AddLines(psYT);
                     pathYT.CloseAllFigures();
                     rectYT =  new  Rectangle(m_workingRect.Left + ( int )(decYTHeight - (m_workingRect.Height - 15)) +1, ( int )(m_workingRect.Bottom - decYTHeight - 4), m_workingRect.Width - ( int )(decYTHeight - (m_workingRect.Height - 15)) * 2-2 , 10);
                 }
                 else
                 {
                     PointF[] psYT =  new  PointF[] 
                    
                         new  PointF(m_workingRect.Left,( float )(m_workingRect.Bottom-decYTHeight)),
                         new  PointF(m_workingRect.Right-1,( float )(m_workingRect.Bottom-decYTHeight)),
                         new  PointF(m_workingRect.Right-1,m_workingRect.Bottom),
                         new  PointF(m_workingRect.Left,m_workingRect.Bottom),
                     };
                     pathYT.AddLines(psYT);
                     pathYT.CloseAllFigures();
                     rectYT =  new  Rectangle(m_workingRect.Left, m_workingRect.Bottom - ( int )decYTHeight - 5, m_workingRect.Width, 10);
                 }
 
                 g.FillPath( new  SolidBrush(liquidColor), pathYT);
                 g.FillPath( new  SolidBrush(Color.FromArgb(50, bottleMouthColor)), pathYT);
                 //画液体面
                 g.FillEllipse( new  SolidBrush(liquidColor), rectYT);
                 g.FillEllipse( new  SolidBrush(Color.FromArgb(50, Color.White)), rectYT);
                 //画高亮
                 int  intCount = m_workingRect.Width / 2 / 4;
                 int  intSplit = (255 - 100) / intCount;
                 for  ( int  i = 0; i < intCount; i++)
                 {
                     int  _penWidth = m_workingRect.Width / 2 - 4 * i;
                     if  (_penWidth <= 0)
                         _penWidth = 1;
                     g.DrawLine( new  Pen( new  SolidBrush(Color.FromArgb(10, Color.White)), _penWidth),  new  Point(m_workingRect.Width / 2, m_workingRect.Top + 15),  new  Point(m_workingRect.Width / 2, m_workingRect.Bottom));
                     if  (_penWidth == 1)
                         break ;
                 }
                 //画瓶底
                 g.FillEllipse( new  SolidBrush(liquidColor),  new  RectangleF(m_workingRect.Left, m_workingRect.Bottom - 5, m_workingRect.Width - 2, 10));
                 g.FillEllipse( new  SolidBrush(Color.FromArgb(50, liquidColor)),  new  RectangleF(m_workingRect.Left, m_workingRect.Bottom - 5, m_workingRect.Width - 2, 10));
                 //画瓶口
                 g.FillRectangle( new  SolidBrush(bottleMouthColor),  new  Rectangle(m_workingRect.Left + m_workingRect.Width / 4, m_workingRect.Top - 15 + 1, m_workingRect.Width / 2, 15));
                 //画瓶颈阴影
                 GraphicsPath pathPJ =  new  GraphicsPath();
                 Point[] psPJ =  new  Point[] 
                 {       
                     new  Point(m_workingRect.Left+m_workingRect.Width/4, m_workingRect.Top),
                     new  Point(m_workingRect.Right-1-m_workingRect.Width/4, m_workingRect.Top),
                     new  Point(m_workingRect.Right-1, m_workingRect.Top+15),
                     new  Point(m_workingRect.Left,  m_workingRect.Top+15)               
                 };
                 pathPJ.AddLines(psPJ);
                 pathPJ.CloseAllFigures();
                 g.FillPath( new  SolidBrush(Color.FromArgb(50, bottleMouthColor)), pathPJ);
                 //写编号
                 if  (! string .IsNullOrEmpty(m_NO))
                 {
                     var  nosize = g.MeasureString(m_NO, Font);
                     g.DrawString(m_NO, Font,  new  SolidBrush(ForeColor),  new  PointF(( this .Width - nosize.Width) / 2, m_workingRect.Bottom - nosize.Height - 10));
                 }
             }

最后的话

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

你可能感兴趣的:((八十七)c#Winform自定义控件-朝上的瓶子)