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+,不懂可以先百度了解下

    开始

    添加一个类UCAlarmLamp,继承自UserControl

    添加属性

     1  /// <summary>
     2         /// The lamp color
     3         /// </summary>
     4         private Color[] lampColor = new Color[] { Color.FromArgb(255, 77, 59) };
     5 
     6         /// <summary>
     7         /// Gets or sets the color of the lamp.
     8         /// </summary>
     9         /// <value>The color of the lamp.</value>
    10         [Description("灯颜色,当需要闪烁时,至少需要2个及以上颜色,不需要闪烁则至少需要1个颜色"), Category("自定义")]
    11         public Color[] LampColor
    12         {
    13             get { return lampColor; }
    14             set
    15             {
    16                 if (value == null || value.Length <= 0)
    17                     return;
    18                 lampColor = value;
    19                 Refresh();
    20             }
    21         }
    22 
    23         /// <summary>
    24         /// The lampstand
    25         /// </summary>
    26         private Color lampstand = Color.FromArgb(105, 105, 105);
    27 
    28         /// <summary>
    29         /// Gets or sets the lampstand.
    30         /// </summary>
    31         /// <value>The lampstand.</value>
    32         [Description("灯座颜色"), Category("自定义")]
    33         public Color Lampstand
    34         {
    35             get { return lampstand; }
    36             set { lampstand = value; }
    37         }
    38 
    39         /// <summary>
    40         /// The twinkle speed
    41         /// </summary>
    42         private int twinkleSpeed = 0;
    43 
    44         /// <summary>
    45         /// Gets or sets the twinkle speed.
    46         /// </summary>
    47         /// <value>The twinkle speed.</value>
    48         [Description("闪烁间隔时间(毫秒),当为0时不闪烁"), Category("自定义")]
    49         public int TwinkleSpeed
    50         {
    51             get { return twinkleSpeed; }
    52             set
    53             {
    54                 if (value < 0)
    55                     return;
    56                 twinkleSpeed = value;
    57                 if (value == 0 || lampColor.Length <= 1)
    58                 {
    59                     timer.Enabled = false;
    60                 }
    61                 else
    62                 {
    63                     intColorIndex = 0;
    64                     timer.Interval = value;
    65                     timer.Enabled = true;
    66                 }
    67                 Refresh();
    68             }
    69         }
    70         /// <summary>
    71         /// The timer
    72         /// </summary>
    73         Timer timer;
    74         /// <summary>
    75         /// The int color index
    76         /// </summary>
    77         int intColorIndex = 0;
    78         /// <summary>
    79         /// The m rect working
    80         /// </summary>
    81         Rectangle m_rectWorking;

    重绘

     1  protected override void OnPaint(PaintEventArgs e)
     2         {
     3             base.OnPaint(e);
     4             var g = e.Graphics;
     5             g.SetGDIHigh();
     6 
     7             Color c1 = lampColor[intColorIndex];
     8             GraphicsPath path = new GraphicsPath();
     9             path.AddLine(new Point(m_rectWorking.Left, m_rectWorking.Bottom), new Point(m_rectWorking.Left, m_rectWorking.Top + m_rectWorking.Width));
    10             path.AddArc(new Rectangle(m_rectWorking.Left, m_rectWorking.Top, m_rectWorking.Width, m_rectWorking.Width), 180f, 180f);
    11             path.AddLine(new Point(m_rectWorking.Right, m_rectWorking.Top + m_rectWorking.Width), new Point(m_rectWorking.Right, m_rectWorking.Bottom));
    12             path.CloseAllFigures();
    13             g.FillPath(new SolidBrush(c1), path);
    14 
    15             g.FillRectangle(new SolidBrush(lampstand), new Rectangle(5, m_rectWorking.Bottom - 19, this.Width - 10, 10));
    16             g.FillRectangle(new SolidBrush(lampstand), new Rectangle(0, m_rectWorking.Bottom - 10, this.Width, 10));
    17         }

    完整代码

      1 // ***********************************************************************
      2 // Assembly         : HZH_Controls
      3 // Created          : 2019-09-10
      4 //
      5 // ***********************************************************************
      6 // <copyright file="UCAlarmLamp.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 UCAlarmLamp.
     29     /// Implements the <see cref="System.Windows.Forms.UserControl" />
     30     /// </summary>
     31     /// <seealso cref="System.Windows.Forms.UserControl" />
     32     public class UCAlarmLamp : UserControl
     33     {
     34         /// <summary>
     35         /// The lamp color
     36         /// </summary>
     37         private Color[] lampColor = new Color[] { Color.FromArgb(255, 77, 59) };
     38 
     39         /// <summary>
     40         /// Gets or sets the color of the lamp.
     41         /// </summary>
     42         /// <value>The color of the lamp.</value>
     43         [Description("灯颜色,当需要闪烁时,至少需要2个及以上颜色,不需要闪烁则至少需要1个颜色"), Category("自定义")]
     44         public Color[] LampColor
     45         {
     46             get { return lampColor; }
     47             set
     48             {
     49                 if (value == null || value.Length <= 0)
     50                     return;
     51                 lampColor = value;
     52                 Refresh();
     53             }
     54         }
     55 
     56         /// <summary>
     57         /// The lampstand
     58         /// </summary>
     59         private Color lampstand = Color.FromArgb(105, 105, 105);
     60 
     61         /// <summary>
     62         /// Gets or sets the lampstand.
     63         /// </summary>
     64         /// <value>The lampstand.</value>
     65         [Description("灯座颜色"), Category("自定义")]
     66         public Color Lampstand
     67         {
     68             get { return lampstand; }
     69             set { lampstand = value; }
     70         }
     71 
     72         /// <summary>
     73         /// The twinkle speed
     74         /// </summary>
     75         private int twinkleSpeed = 0;
     76 
     77         /// <summary>
     78         /// Gets or sets the twinkle speed.
     79         /// </summary>
     80         /// <value>The twinkle speed.</value>
     81         [Description("闪烁间隔时间(毫秒),当为0时不闪烁"), Category("自定义")]
     82         public int TwinkleSpeed
     83         {
     84             get { return twinkleSpeed; }
     85             set
     86             {
     87                 if (value < 0)
     88                     return;
     89                 twinkleSpeed = value;
     90                 if (value == 0 || lampColor.Length <= 1)
     91                 {
     92                     timer.Enabled = false;
     93                 }
     94                 else
     95                 {
     96                     intColorIndex = 0;
     97                     timer.Interval = value;
     98                     timer.Enabled = true;
     99                 }
    100                 Refresh();
    101             }
    102         }
    103         /// <summary>
    104         /// The timer
    105         /// </summary>
    106         Timer timer;
    107         /// <summary>
    108         /// The int color index
    109         /// </summary>
    110         int intColorIndex = 0;
    111         /// <summary>
    112         /// The m rect working
    113         /// </summary>
    114         Rectangle m_rectWorking;
    115         /// <summary>
    116         /// Initializes a new instance of the <see cref="UCAlarmLamp"/> class.
    117         /// </summary>
    118         public UCAlarmLamp()
    119         {
    120             this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    121             this.SetStyle(ControlStyles.DoubleBuffer, true);
    122             this.SetStyle(ControlStyles.ResizeRedraw, true);
    123             this.SetStyle(ControlStyles.Selectable, true);
    124             this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    125             this.SetStyle(ControlStyles.UserPaint, true);
    126             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
    127             this.SizeChanged += UCAlarmLamp_SizeChanged;
    128             this.Size = new Size(50, 50);
    129             timer = new Timer();
    130             timer.Interval = 200;
    131             timer.Tick += timer_Tick;
    132         }
    133 
    134         /// <summary>
    135         /// Handles the SizeChanged event of the UCAlarmLamp control.
    136         /// </summary>
    137         /// <param name="sender">The source of the event.</param>
    138         /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
    139         void UCAlarmLamp_SizeChanged(object sender, EventArgs e)
    140         {
    141             m_rectWorking = new Rectangle(10, 0, this.Width - 20, this.Height);
    142         }
    143         /// <summary>
    144         /// Handles the Tick event of the timer control.
    145         /// </summary>
    146         /// <param name="sender">The source of the event.</param>
    147         /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
    148         void timer_Tick(object sender, EventArgs e)
    149         {
    150             intColorIndex++;
    151             if (intColorIndex >= lampColor.Length)
    152                 intColorIndex = 0;
    153             Refresh();
    154         }
    155         /// <summary>
    156         /// 引发 <see cref="E:System.Windows.Forms.Control.Paint" /> 事件。
    157         /// </summary>
    158         /// <param name="e">包含事件数据的 <see cref="T:System.Windows.Forms.PaintEventArgs" /></param>
    159         protected override void OnPaint(PaintEventArgs e)
    160         {
    161             base.OnPaint(e);
    162             var g = e.Graphics;
    163             g.SetGDIHigh();
    164 
    165             Color c1 = lampColor[intColorIndex];
    166             GraphicsPath path = new GraphicsPath();
    167             path.AddLine(new Point(m_rectWorking.Left, m_rectWorking.Bottom), new Point(m_rectWorking.Left, m_rectWorking.Top + m_rectWorking.Width));
    168             path.AddArc(new Rectangle(m_rectWorking.Left, m_rectWorking.Top, m_rectWorking.Width, m_rectWorking.Width), 180f, 180f);
    169             path.AddLine(new Point(m_rectWorking.Right, m_rectWorking.Top + m_rectWorking.Width), new Point(m_rectWorking.Right, m_rectWorking.Bottom));
    170             path.CloseAllFigures();
    171             g.FillPath(new SolidBrush(c1), path);
    172 
    173             g.FillRectangle(new SolidBrush(lampstand), new Rectangle(5, m_rectWorking.Bottom - 19, this.Width - 10, 10));
    174             g.FillRectangle(new SolidBrush(lampstand), new Rectangle(0, m_rectWorking.Bottom - 10, this.Width, 10));
    175         }
    176     }
    177 }
    View Code

    最后的话

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

  • 相关阅读:
    Java 的this和super关键字
    Java关于访问控制权限
    Java 封装 继承 多态
    Java的集成开发工具
    如何查询小程序中的代码量
    小程序中使用echarts及使用的坑
    微信小程序-新的页面授权机制
    前端处理几十万条数据不卡顿(window.requestAnimationFrame)
    Vs code中Eslint 与 Prettier格式化冲突
    从原型与原型链的角度看es6 class
  • 原文地址:https://www.cnblogs.com/bfyx/p/11495688.html
Copyright © 2011-2022 走看看