Files
VisionEdit/UsingControl/HZHControls/Controls/LED/UCLEDNum.cs
liu.wenjie a24dda2525 1、优化LOG显示与引用
2、添加PMA工具,工具内容待完善
3、修复流程树显示
4、添加开源项目,优化UI空间
5、其他BUG更改
2021-11-23 15:51:37 +08:00

452 lines
17 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ***********************************************************************
// Assembly : HZH_Controls
// Created : 09-02-2019
//
// ***********************************************************************
// <copyright file="UCLEDNum.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHubhttps://github.com/kwwwvagaa/NetWinformControl
// giteehttps://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
namespace HZH_Controls.Controls
{
/* 显示位置序号
* ****1***
* * *
* 6 2
* * *
* ****7***
* * *
* 5 3
* * *
* ****4***
*/
/// <summary>
/// Class UCLEDNum.
/// Implements the <see cref="System.Windows.Forms.UserControl" />
/// </summary>
/// <seealso cref="System.Windows.Forms.UserControl" />
public class UCLEDNum : UserControl
{
/// <summary>
/// The m draw rect
/// </summary>
Rectangle m_drawRect = Rectangle.Empty;
/// <summary>
/// The m nums
/// </summary>
private static Dictionary<char, int[]> m_nums = new Dictionary<char, int[]>();
/// <summary>
/// Initializes static members of the <see cref="UCLEDNum" /> class.
/// </summary>
static UCLEDNum()
{
m_nums['0'] = new int[] { 1, 2, 3, 4, 5, 6 };
m_nums['1'] = new int[] { 2, 3 };
m_nums['2'] = new int[] { 1, 2, 5, 4, 7 };
m_nums['3'] = new int[] { 1, 2, 7, 3, 4 };
m_nums['4'] = new int[] { 2, 3, 6, 7 };
m_nums['5'] = new int[] { 1, 6, 7, 3, 4 };
m_nums['6'] = new int[] { 1, 6, 5, 4, 3, 7 };
m_nums['7'] = new int[] { 1, 2, 3 };
m_nums['8'] = new int[] { 1, 2, 3, 4, 5, 6, 7 };
m_nums['9'] = new int[] { 1, 2, 3, 4, 7, 6 };
m_nums['A'] = new int[] { 1, 2, 3, 5, 6, 7 };
m_nums['b'] = new int[] { 3, 4, 5, 6, 7 };
m_nums['C'] = new int[] { 1, 6, 5, 4 };
m_nums['c'] = new int[] { 7, 5, 4 };
m_nums['d'] = new int[] { 2, 3, 4, 5, 7 };
m_nums['E'] = new int[] { 1, 4, 5, 6, 7 };
m_nums['F'] = new int[] { 1, 5, 6, 7 };
m_nums['H'] = new int[] { 2, 3, 5, 6, 7 };
m_nums['h'] = new int[] { 3, 5, 6, 7 };
m_nums['J'] = new int[] { 2, 3, 4 };
m_nums['L'] = new int[] { 4, 5, 6 };
m_nums['o'] = new int[] { 3, 4, 5, 7 };
m_nums['P'] = new int[] { 1, 2, 5, 6, 7 };
m_nums['r'] = new int[] { 5, 7 };
m_nums['U'] = new int[] { 2, 3, 4, 5, 6 };
m_nums['-'] = new int[] { 7 };
m_nums[':'] = new int[0];
m_nums['.'] = new int[0];
}
/// <summary>
/// Initializes a new instance of the <see cref="UCLEDNum" /> class.
/// </summary>
public UCLEDNum()
{
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.SetStyle(ControlStyles.UserPaint, true);
SizeChanged += LEDNum_SizeChanged;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
Size = new System.Drawing.Size(40, 70);
if (m_drawRect == Rectangle.Empty)
m_drawRect = new Rectangle(1, 1, this.Width - 2, this.Height - 2);
}
/// <summary>
/// Handles the SizeChanged event of the LEDNum control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
void LEDNum_SizeChanged(object sender, EventArgs e)
{
m_drawRect = new Rectangle(1, 1, this.Width - 2, this.Height - 2);
}
/// <summary>
/// The m value
/// </summary>
private char m_value = '0';
/// <summary>
/// Gets or sets the value.
/// </summary>
/// <value>The value.</value>
[Description("值"), Category("自定义")]
public char Value
{
get { return m_value; }
set
{
if (!m_nums.ContainsKey(value))
{
return;
}
if (m_value != value)
{
m_value = value;
Refresh();
}
}
}
/// <summary>
/// Sets the character value.
/// </summary>
/// <value>The character value.</value>
public LEDNumChar ValueChar
{
get
{
return (LEDNumChar)((int)m_value);
}
set
{
Value = (char)value;
}
}
/// <summary>
/// The m line width
/// </summary>
private int m_lineWidth = 8;
/// <summary>
/// Gets or sets the width of the line.
/// </summary>
/// <value>The width of the line.</value>
[Description("线宽度,为了更好的显示效果,请使用偶数"), Category("自定义")]
public int LineWidth
{
get { return m_lineWidth; }
set
{
m_lineWidth = value;
Refresh();
}
}
/// <summary>
/// 获取或设置控件的前景色。
/// </summary>
/// <value>The color of the fore.</value>
/// <PermissionSet>
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// </PermissionSet>
[Description("颜色"), Category("自定义")]
public override System.Drawing.Color ForeColor
{
get
{
return base.ForeColor;
}
set
{
base.ForeColor = value;
}
}
/// <summary>
/// 引发 <see cref="E:System.Windows.Forms.Control.Paint" /> 事件。
/// </summary>
/// <param name="e">包含事件数据的 <see cref="T:System.Windows.Forms.PaintEventArgs" />。</param>
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.SetGDIHigh();
if (m_value == '.')
{
Rectangle r2 = new Rectangle(m_drawRect.Left + (m_drawRect.Width - m_lineWidth) / 2, m_drawRect.Bottom - m_lineWidth * 2, m_lineWidth, m_lineWidth);
e.Graphics.FillRectangle(new SolidBrush(ForeColor), r2);
}
else if (m_value == ':')
{
Rectangle r1 = new Rectangle(m_drawRect.Left + (m_drawRect.Width - m_lineWidth) / 2, m_drawRect.Top + (m_drawRect.Height / 2 - m_lineWidth) / 2, m_lineWidth, m_lineWidth);
e.Graphics.FillRectangle(new SolidBrush(ForeColor), r1);
Rectangle r2 = new Rectangle(m_drawRect.Left + (m_drawRect.Width - m_lineWidth) / 2, m_drawRect.Top + (m_drawRect.Height / 2 - m_lineWidth) / 2 + m_drawRect.Height / 2, m_lineWidth, m_lineWidth);
e.Graphics.FillRectangle(new SolidBrush(ForeColor), r2);
}
else
{
int[] vs = m_nums[m_value];
if (vs.Contains(1))
{
GraphicsPath path = new GraphicsPath();
path.AddLines(new Point[]
{
new Point(m_drawRect.Left + 2, m_drawRect.Top),
new Point(m_drawRect.Right - 2, m_drawRect.Top),
new Point(m_drawRect.Right - m_lineWidth-2, m_drawRect.Top+m_lineWidth),
new Point(m_drawRect.Left + m_lineWidth+2, m_drawRect.Top+m_lineWidth),
new Point(m_drawRect.Left + 2, m_drawRect.Top)
});
path.CloseAllFigures();
e.Graphics.FillPath(new SolidBrush(ForeColor), path);
}
if (vs.Contains(2))
{
GraphicsPath path = new GraphicsPath();
path.AddLines(new Point[]
{
new Point(m_drawRect.Right, m_drawRect.Top),
new Point(m_drawRect.Right, m_drawRect.Top+(m_drawRect.Height-m_lineWidth-4)/2),
new Point(m_drawRect.Right-m_lineWidth/2, m_drawRect.Top+(m_drawRect.Height-m_lineWidth-4)/2+m_lineWidth/2),
new Point(m_drawRect.Right-m_lineWidth, m_drawRect.Top+(m_drawRect.Height-m_lineWidth-4)/2),
new Point(m_drawRect.Right-m_lineWidth, m_drawRect.Top+m_lineWidth),
new Point(m_drawRect.Right, m_drawRect.Top)
});
path.CloseAllFigures();
e.Graphics.FillPath(new SolidBrush(ForeColor), path);
}
if (vs.Contains(3))
{
GraphicsPath path = new GraphicsPath();
path.AddLines(new Point[]
{
new Point(m_drawRect.Right, m_drawRect.Bottom-(m_drawRect.Height-m_lineWidth-4)/2),
new Point(m_drawRect.Right, m_drawRect.Bottom),
new Point(m_drawRect.Right-m_lineWidth, m_drawRect.Bottom-m_lineWidth),
new Point(m_drawRect.Right-m_lineWidth, m_drawRect.Bottom-(m_drawRect.Height-m_lineWidth-4)/2),
new Point(m_drawRect.Right-m_lineWidth/2, m_drawRect.Bottom-(m_drawRect.Height-m_lineWidth-4)/2-m_lineWidth/2),
new Point(m_drawRect.Right, m_drawRect.Bottom-(m_drawRect.Height-m_lineWidth-4)/2),
});
path.CloseAllFigures();
e.Graphics.FillPath(new SolidBrush(ForeColor), path);
}
if (vs.Contains(4))
{
GraphicsPath path = new GraphicsPath();
path.AddLines(new Point[]
{
new Point(m_drawRect.Left + 2, m_drawRect.Bottom),
new Point(m_drawRect.Right - 2, m_drawRect.Bottom),
new Point(m_drawRect.Right - m_lineWidth-2, m_drawRect.Bottom-m_lineWidth),
new Point(m_drawRect.Left + m_lineWidth+2, m_drawRect.Bottom-m_lineWidth),
new Point(m_drawRect.Left + 2, m_drawRect.Bottom)
});
path.CloseAllFigures();
e.Graphics.FillPath(new SolidBrush(ForeColor), path);
}
if (vs.Contains(5))
{
GraphicsPath path = new GraphicsPath();
path.AddLines(new Point[]
{
new Point(m_drawRect.Left, m_drawRect.Bottom-(m_drawRect.Height-m_lineWidth-4)/2),
new Point(m_drawRect.Left, m_drawRect.Bottom),
new Point(m_drawRect.Left+m_lineWidth, m_drawRect.Bottom-m_lineWidth),
new Point(m_drawRect.Left+m_lineWidth, m_drawRect.Bottom-(m_drawRect.Height-m_lineWidth-4)/2),
new Point(m_drawRect.Left+m_lineWidth/2, m_drawRect.Bottom-(m_drawRect.Height-m_lineWidth-4)/2-m_lineWidth/2),
new Point(m_drawRect.Left, m_drawRect.Bottom-(m_drawRect.Height-m_lineWidth-4)/2),
});
path.CloseAllFigures();
e.Graphics.FillPath(new SolidBrush(ForeColor), path);
}
if (vs.Contains(6))
{
GraphicsPath path = new GraphicsPath();
path.AddLines(new Point[]
{
new Point(m_drawRect.Left, m_drawRect.Top),
new Point(m_drawRect.Left, m_drawRect.Top+(m_drawRect.Height-m_lineWidth-4)/2),
new Point(m_drawRect.Left+m_lineWidth/2, m_drawRect.Top+(m_drawRect.Height-m_lineWidth-4)/2+m_lineWidth/2),
new Point(m_drawRect.Left+m_lineWidth, m_drawRect.Top+(m_drawRect.Height-m_lineWidth-4)/2),
new Point(m_drawRect.Left+m_lineWidth, m_drawRect.Top+m_lineWidth),
new Point(m_drawRect.Left, m_drawRect.Top)
});
path.CloseAllFigures();
e.Graphics.FillPath(new SolidBrush(ForeColor), path);
}
if (vs.Contains(7))
{
GraphicsPath path = new GraphicsPath();
path.AddLines(new Point[]
{
new Point(m_drawRect.Left+m_lineWidth/2, m_drawRect.Height/2+1),
new Point(m_drawRect.Left+m_lineWidth, m_drawRect.Height/2-m_lineWidth/2+1),
new Point(m_drawRect.Right-m_lineWidth, m_drawRect.Height/2-m_lineWidth/2+1),
new Point(m_drawRect.Right-m_lineWidth/2, m_drawRect.Height/2+1),
new Point(m_drawRect.Right-m_lineWidth, m_drawRect.Height/2+m_lineWidth/2+1),
new Point(m_drawRect.Left+m_lineWidth, m_drawRect.Height/2+m_lineWidth/2+1),
new Point(m_drawRect.Left+m_lineWidth/2, m_drawRect.Height/2+1)
});
path.CloseAllFigures();
e.Graphics.FillPath(new SolidBrush(ForeColor), path);
}
}
}
}
/// <summary>Enum LEDNumChar</summary>
public enum LEDNumChar : int
{
/// <summary>
/// The character 0
/// </summary>
CHAR_0 = (int)'0',
/// <summary>
/// The character 1
/// </summary>
CHAR_1 = (int)'1',
/// <summary>
/// The character 2
/// </summary>
CHAR_2 = (int)'2',
/// <summary>
/// The character 3
/// </summary>
CHAR_3 = (int)'3',
/// <summary>
/// The character 4
/// </summary>
CHAR_4 = (int)'4',
CHAR_5 = (int)'5',
/// <summary>
/// The character 6
/// </summary>
CHAR_6 = (int)'6',
/// <summary>
/// The character 7
/// </summary>
CHAR_7 = (int)'7',
/// <summary>
/// The character 8
/// </summary>
CHAR_8 = (int)'8',
/// <summary>
/// The character 9
/// </summary>
CHAR_9 = (int)'9',
/// <summary>
/// The character a
/// </summary>
CHAR_A = (int)'A',
/// <summary>
/// The character b
/// </summary>
CHAR_b = (int)'b',
/// <summary>
/// The character c
/// </summary>
CHAR_C = (int)'C',
/// <summary>
/// The character c
/// </summary>
CHAR_c = (int)'c',
/// <summary>
/// The character d
/// </summary>
CHAR_d = (int)'d',
/// <summary>
/// The character e
/// </summary>
CHAR_E = (int)'E',
/// <summary>
/// The character f
/// </summary>
CHAR_F = (int)'F',
/// <summary>
/// The character h
/// </summary>
CHAR_H = (int)'H',
/// <summary>
/// The character h
/// </summary>
CHAR_h = (int)'h',
/// <summary>
/// The character j
/// </summary>
CHAR_J = (int)'J',
/// <summary>
/// The character l
/// </summary>
CHAR_L = (int)'L',
/// <summary>
/// The character o
/// </summary>
CHAR_o = (int)'o',
/// <summary>
/// The character p
/// </summary>
CHAR_P = (int)'P',
/// <summary>
/// The character r
/// </summary>
CHAR_r = (int)'r',
/// <summary>
/// The character u
/// </summary>
CHAR_U = (int)'U',
/// <summary>
/// The character horizontal line
/// </summary>
CHAR_HorizontalLine = (int)'-',
/// <summary>
/// The character colon
/// </summary>
CHAR_Colon = (int)':',
/// <summary>
/// The character dot
/// </summary>
CHAR_Dot = (int)'.',
}
}