#region Imports using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; #endregion namespace DPumpHydr.WinFrmUI.RLT.Controls { #region CheckBox [DefaultEvent("CheckedChanged")] public class CheckBox : Control { #region Variables private int X; private bool _Enable = true; private bool _Checked = false; private GraphicsPath Shape; #endregion #region Properties public bool Checked { get => _Checked; set { _Checked = value; CheckedChangedEvent?.Invoke(this); Invalidate(); } } public bool Enable { get => _Enable; set { _Enable = value; Invalidate(); } } public Color CheckedEnabledColor { get; set; } = Color.FromArgb(32, 34, 37); public Color CheckedDisabledColor { get; set; } = Color.Gray; public Color CheckedBorderColor { get; set; } = Color.FromArgb(66, 76, 85); public Color CheckedBackColor { get; set; } = Color.FromArgb(66, 76, 85); #endregion #region EventArgs public delegate void CheckedChangedEventHandler(object sender); private CheckedChangedEventHandler CheckedChangedEvent; public event CheckedChangedEventHandler CheckedChanged { add => CheckedChangedEvent = (CheckedChangedEventHandler)Delegate.Combine(CheckedChangedEvent, value); remove => CheckedChangedEvent = (CheckedChangedEventHandler)Delegate.Remove(CheckedChangedEvent, value); } protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); X = e.Location.X; Invalidate(); } protected override void OnMouseDown(MouseEventArgs e) { if (_Enable) { Checked = !Checked; Focus(); base.OnMouseDown(e); } } protected override void OnResize(EventArgs e) { base.OnResize(e); Height = 16; Shape = new(); Shape.AddArc(0, 0, 10, 10, 180, 90); Shape.AddArc(Width - 11, 0, 10, 10, -90, 90); Shape.AddArc(Width - 11, Height - 11, 10, 10, 0, 90); Shape.AddArc(0, Height - 11, 10, 10, 90, 90); Shape.CloseAllFigures(); Invalidate(); } #endregion public CheckBox() { Width = 85; Height = 16; Font = new("Microsoft Sans Serif", 9); DoubleBuffered = true; Cursor = Cursors.Hand; ForeColor = Color.FromArgb(116, 125, 132); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics G = e.Graphics; G.Clear(BackColor); if (_Checked) { G.FillRectangle(new SolidBrush(CheckedBorderColor), new Rectangle(0, 0, 16, 16)); G.FillRectangle(new SolidBrush(CheckedBackColor), new Rectangle(1, 1, 16 - 2, 16 - 2)); } else { G.FillRectangle(new SolidBrush(CheckedBorderColor), new Rectangle(0, 0, 16, 16)); G.FillRectangle(new SolidBrush(CheckedBackColor), new Rectangle(1, 1, 16 - 2, 16 - 2)); } if (_Enable) { if (_Checked) { G.DrawString("a", new Font("Marlett", 16), new SolidBrush(CheckedEnabledColor), new Point(-5, -3)); } Cursor = Cursors.Hand; } else { if (_Checked) { G.DrawString("a", new Font("Marlett", 16), new SolidBrush(CheckedDisabledColor), new Point(-5, -3)); } Cursor = Cursors.Default; } G.DrawString(Text, Font, new SolidBrush(ForeColor), new Point(20, 0)); } } #endregion }