• (五十九)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+画的,应该算是最简单的控件了,本来不打算单独写一篇文章的,但是好歹也是个控件吧,于是就写这里了

    开始

    添加一个类UCPond ,继承UserControl

    属性

      1  /// <summary>
      2         /// The maximum value
      3         /// </summary>
      4         private decimal maxValue = 100;
      5 
      6         /// <summary>
      7         /// Gets or sets the maximum value.
      8         /// </summary>
      9         /// <value>The maximum value.</value>
     10         [Description("最大值"), Category("自定义")]
     11         public decimal MaxValue
     12         {
     13             get { return maxValue; }
     14             set
     15             {
     16                 if (value < m_value)
     17                     return;
     18                 maxValue = value;
     19                 Refresh();
     20             }
     21         }
     22 
     23         /// <summary>
     24         /// The m value
     25         /// </summary>
     26         private decimal m_value = 0;
     27 
     28         /// <summary>
     29         /// Gets or sets the value.
     30         /// </summary>
     31         /// <value>The value.</value>
     32         [Description(""), Category("自定义")]
     33         public decimal Value
     34         {
     35             get { return m_value; }
     36             set
     37             {
     38                 if (value < 0)
     39                     return;
     40                 if (value > maxValue)
     41                     m_value = maxValue;
     42                 else
     43                     m_value = value;
     44                 Refresh();
     45             }
     46         }
     47 
     48         /// <summary>
     49         /// The wall color
     50         /// </summary>
     51         private Color wallColor = Color.FromArgb(255, 77, 59);
     52 
     53         /// <summary>
     54         /// Gets or sets the color of the wall.
     55         /// </summary>
     56         /// <value>The color of the wall.</value>
     57         [Description("池壁颜色"), Category("自定义")]
     58         public Color WallColor
     59         {
     60             get { return wallColor; }
     61             set
     62             {
     63                 wallColor = value;
     64                 Refresh();
     65             }
     66         }
     67 
     68         /// <summary>
     69         /// The wall width
     70         /// </summary>
     71         private int wallWidth = 2;
     72 
     73         /// <summary>
     74         /// Gets or sets the width of the wall.
     75         /// </summary>
     76         /// <value>The width of the wall.</value>
     77         [Description("池壁宽度"), Category("自定义")]
     78         public int WallWidth
     79         {
     80             get { return wallWidth; }
     81             set
     82             {
     83                 if (value <= 0)
     84                     return;
     85                 wallWidth = value;
     86                 Refresh();
     87             }
     88         }
     89 
     90         /// <summary>
     91         /// The liquid color
     92         /// </summary>
     93         private Color liquidColor = Color.FromArgb(3, 169, 243);
     94 
     95         [Description("液体颜色"), Category("自定义")]
     96         public Color LiquidColor
     97         {
     98             get { return liquidColor; }
     99             set { liquidColor = value; }
    100         }

    重绘

      protected override void OnPaint(PaintEventArgs e)
            {
                base.OnPaint(e);
                if (Height <= 0)
                    return;
                var g = e.Graphics;
                g.SetGDIHigh();
                int intHeight = (int)(m_value / maxValue * this.Height);
                if (intHeight != 0)
                {
                    g.FillRectangle(new SolidBrush(liquidColor), new Rectangle(0, this.Height - intHeight, this.Width, intHeight));
                }
                //划边
                g.FillRectangle(new SolidBrush(wallColor), 0, 0, wallWidth, this.Height);
                g.FillRectangle(new SolidBrush(wallColor), 0, this.Height - wallWidth, this.Width, wallWidth);
                g.FillRectangle(new SolidBrush(wallColor), this.Width - wallWidth-1, 0, wallWidth, this.Height);
            }

    完整代码

      1 // ***********************************************************************
      2 // Assembly         : HZH_Controls
      3 // Created          : 2019-09-06
      4 //
      5 // ***********************************************************************
      6 // <copyright file="UCPond.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 UCPond.
     29     /// Implements the <see cref="System.Windows.Forms.UserControl" />
     30     /// </summary>
     31     /// <seealso cref="System.Windows.Forms.UserControl" />
     32     public class UCPond : UserControl
     33     {
     34         /// <summary>
     35         /// The maximum value
     36         /// </summary>
     37         private decimal maxValue = 100;
     38 
     39         /// <summary>
     40         /// Gets or sets the maximum value.
     41         /// </summary>
     42         /// <value>The maximum value.</value>
     43         [Description("最大值"), Category("自定义")]
     44         public decimal MaxValue
     45         {
     46             get { return maxValue; }
     47             set
     48             {
     49                 if (value < m_value)
     50                     return;
     51                 maxValue = value;
     52                 Refresh();
     53             }
     54         }
     55 
     56         /// <summary>
     57         /// The m value
     58         /// </summary>
     59         private decimal m_value = 0;
     60 
     61         /// <summary>
     62         /// Gets or sets the value.
     63         /// </summary>
     64         /// <value>The value.</value>
     65         [Description(""), Category("自定义")]
     66         public decimal Value
     67         {
     68             get { return m_value; }
     69             set
     70             {
     71                 if (value < 0)
     72                     return;
     73                 if (value > maxValue)
     74                     m_value = maxValue;
     75                 else
     76                     m_value = value;
     77                 Refresh();
     78             }
     79         }
     80 
     81         /// <summary>
     82         /// The wall color
     83         /// </summary>
     84         private Color wallColor = Color.FromArgb(255, 77, 59);
     85 
     86         /// <summary>
     87         /// Gets or sets the color of the wall.
     88         /// </summary>
     89         /// <value>The color of the wall.</value>
     90         [Description("池壁颜色"), Category("自定义")]
     91         public Color WallColor
     92         {
     93             get { return wallColor; }
     94             set
     95             {
     96                 wallColor = value;
     97                 Refresh();
     98             }
     99         }
    100 
    101         /// <summary>
    102         /// The wall width
    103         /// </summary>
    104         private int wallWidth = 2;
    105 
    106         /// <summary>
    107         /// Gets or sets the width of the wall.
    108         /// </summary>
    109         /// <value>The width of the wall.</value>
    110         [Description("池壁宽度"), Category("自定义")]
    111         public int WallWidth
    112         {
    113             get { return wallWidth; }
    114             set
    115             {
    116                 if (value <= 0)
    117                     return;
    118                 wallWidth = value;
    119                 Refresh();
    120             }
    121         }
    122 
    123         /// <summary>
    124         /// The liquid color
    125         /// </summary>
    126         private Color liquidColor = Color.FromArgb(3, 169, 243);
    127 
    128         [Description("液体颜色"), Category("自定义")]
    129         public Color LiquidColor
    130         {
    131             get { return liquidColor; }
    132             set { liquidColor = value; }
    133         }
    134         /// <summary>
    135         /// Initializes a new instance of the <see cref="UCPond"/> class.
    136         /// </summary>
    137         public UCPond()
    138         {
    139             this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    140             this.SetStyle(ControlStyles.DoubleBuffer, true);
    141             this.SetStyle(ControlStyles.ResizeRedraw, true);
    142             this.SetStyle(ControlStyles.Selectable, true);
    143             this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    144             this.SetStyle(ControlStyles.UserPaint, true);
    145             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
    146             this.Size = new Size(150, 50);
    147         }
    148         /// <summary>
    149         /// 引发 <see cref="E:System.Windows.Forms.Control.Paint" /> 事件。
    150         /// </summary>
    151         /// <param name="e">包含事件数据的 <see cref="T:System.Windows.Forms.PaintEventArgs" /></param>
    152         protected override void OnPaint(PaintEventArgs e)
    153         {
    154             base.OnPaint(e);
    155             if (Height <= 0)
    156                 return;
    157             var g = e.Graphics;
    158             g.SetGDIHigh();
    159             int intHeight = (int)(m_value / maxValue * this.Height);
    160             if (intHeight != 0)
    161             {
    162                 g.FillRectangle(new SolidBrush(liquidColor), new Rectangle(0, this.Height - intHeight, this.Width, intHeight));
    163             }
    164             //划边
    165             g.FillRectangle(new SolidBrush(wallColor), 0, 0, wallWidth, this.Height);
    166             g.FillRectangle(new SolidBrush(wallColor), 0, this.Height - wallWidth, this.Width, wallWidth);
    167             g.FillRectangle(new SolidBrush(wallColor), this.Width - wallWidth-1, 0, wallWidth, this.Height);
    168         }
    169     }
    170 }

    最后的话

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

  • 相关阅读:
    模板【洛谷P3368】 【模板】树状数组 2
    模板【洛谷P3812】 【模板】线性基
    Java面向对象-多态
    Java常用工具类
    Java常用工具类
    Java static关键字
    MyBatis对象关联查询demo (一对多,多对一)
    将Cmder添加到系统右键菜单中
    IDEA 创建JavaWeb应用打包并发布
    IDEA 调试与打包
  • 原文地址:https://www.cnblogs.com/bfyx/p/11477241.html
Copyright © 2020-2023  润新知