#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 RadioButton
|
|
[DefaultEvent("CheckedChanged")]
|
public class RadioButton : Control
|
{
|
#region Variables
|
|
private int X;
|
private bool _Checked;
|
private Color _CheckedColor = Color.FromArgb(32, 34, 37);
|
private Color _CircleColor = Color.FromArgb(66, 76, 85);
|
private SmoothingMode _SmoothingType = SmoothingMode.HighQuality;
|
|
#endregion
|
|
#region Properties
|
|
public bool Checked
|
{
|
get => _Checked;
|
set
|
{
|
_Checked = value;
|
InvalidateControls();
|
CheckedChangedEvent?.Invoke(this);
|
Invalidate();
|
}
|
}
|
|
public SmoothingMode SmoothingType
|
{
|
get => _SmoothingType;
|
set
|
{
|
_SmoothingType = value;
|
Invalidate();
|
}
|
}
|
|
public Color CircleColor
|
{
|
get => _CircleColor;
|
set
|
{
|
_CircleColor = value;
|
Invalidate();
|
}
|
}
|
|
public Color CheckedColor
|
{
|
get => _CheckedColor;
|
set
|
{
|
_CheckedColor = value;
|
Invalidate();
|
}
|
}
|
|
#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 OnMouseDown(MouseEventArgs e)
|
{
|
if (!_Checked)
|
{
|
@Checked = true;
|
}
|
else
|
{
|
@Checked = false;
|
}
|
|
Focus();
|
base.OnMouseDown(e);
|
}
|
|
protected override void OnMouseMove(MouseEventArgs e)
|
{
|
base.OnMouseMove(e);
|
X = e.X;
|
Invalidate();
|
}
|
|
protected override void OnTextChanged(EventArgs e)
|
{
|
base.OnTextChanged(e);
|
//Width = 20 + (int)CreateGraphics().MeasureString(Text, Font).Width;
|
//Width = 20 + (int)TextRenderer.MeasureText(Text, Font).Width;
|
}
|
|
protected override void OnResize(EventArgs e)
|
{
|
base.OnResize(e);
|
Height = 17;
|
}
|
|
#endregion
|
|
public RadioButton()
|
{
|
Size = new(120, 17);
|
DoubleBuffered = true;
|
Cursor = Cursors.Hand;
|
ForeColor = Color.FromArgb(116, 125, 132);
|
}
|
|
private void InvalidateControls()
|
{
|
if (!IsHandleCreated || !_Checked)
|
{
|
return;
|
}
|
|
foreach (Control _Control in Parent.Controls)
|
{
|
if (_Control != this && _Control is RadioButton button)
|
{
|
button.Checked = false;
|
}
|
}
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
base.OnPaint(e);
|
Graphics G = e.Graphics;
|
G.Clear(Parent.BackColor);
|
G.SmoothingMode = SmoothingType;
|
|
G.FillEllipse(new SolidBrush(CircleColor), new Rectangle(0, 0, 16, 16));
|
|
if (_Checked)
|
{
|
G.DrawString("a", new Font("Marlett", 15), new SolidBrush(CheckedColor), new Point(-3, -2));
|
}
|
|
G.DrawString(Text, Font, new SolidBrush(ForeColor), new Point(20, -3));
|
}
|
}
|
|
#endregion
|
}
|