136 lines
3.6 KiB
C#
136 lines
3.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace CPM.ProgressBar
|
|
{
|
|
public class LV_CIRCULEPROGRESSBAR : UserControl
|
|
{
|
|
private int _valor = 0;
|
|
private int _maximo = 100;
|
|
private int _larguraBorda = 10;
|
|
private Color _corProgresso = Color.FromArgb(0, 120, 215);
|
|
private Color _corFundo = Color.LightGray;
|
|
private Font _fonteTexto = new Font("Segoe UI", 10, FontStyle.Bold);
|
|
private bool _mostrarPorcentagem = true;
|
|
|
|
[Category("Comportamento")]
|
|
public int Valor
|
|
{
|
|
get => _valor;
|
|
set
|
|
{
|
|
_valor = Math.Min(_maximo, Math.Max(0, value));
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
[Category("Comportamento")]
|
|
public int Maximo
|
|
{
|
|
get => _maximo;
|
|
set
|
|
{
|
|
_maximo = value <= 0 ? 1 : value;
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
[Category("Aparência")]
|
|
public int LarguraBorda
|
|
{
|
|
get => _larguraBorda;
|
|
set
|
|
{
|
|
_larguraBorda = Math.Max(1, value);
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
[Category("Aparência")]
|
|
public Color CorProgresso
|
|
{
|
|
get => _corProgresso;
|
|
set
|
|
{
|
|
_corProgresso = value;
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
[Category("Aparência")]
|
|
public Color CorFundo
|
|
{
|
|
get => _corFundo;
|
|
set
|
|
{
|
|
_corFundo = value;
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
[Category("Aparência")]
|
|
public Font FonteTexto
|
|
{
|
|
get => _fonteTexto;
|
|
set
|
|
{
|
|
_fonteTexto = value;
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
[Category("Aparência")]
|
|
public bool MostrarPorcentagem
|
|
{
|
|
get => _mostrarPorcentagem;
|
|
set
|
|
{
|
|
_mostrarPorcentagem = value;
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
public LV_CIRCULEPROGRESSBAR()
|
|
{
|
|
DoubleBuffered = true;
|
|
ResizeRedraw = true;
|
|
Size = new Size(150, 150);
|
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
base.OnPaint(e);
|
|
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
|
|
|
Rectangle rect = new Rectangle(_larguraBorda, _larguraBorda,
|
|
Width - _larguraBorda * 2, Height - _larguraBorda * 2);
|
|
|
|
using (Pen fundoPen = new Pen(_corFundo, _larguraBorda))
|
|
using (Pen progressoPen = new Pen(_corProgresso, _larguraBorda))
|
|
{
|
|
progressoPen.StartCap = LineCap.Round;
|
|
progressoPen.EndCap = LineCap.Round;
|
|
|
|
// Fundo
|
|
e.Graphics.DrawArc(fundoPen, rect, -90, 360);
|
|
|
|
// Progresso
|
|
float angulo = 360f * _valor / _maximo;
|
|
e.Graphics.DrawArc(progressoPen, rect, -90, angulo);
|
|
}
|
|
|
|
if (_mostrarPorcentagem)
|
|
{
|
|
string texto = $"{(int)((double)_valor / _maximo * 100)}%";
|
|
SizeF tamanhoTexto = e.Graphics.MeasureString(texto, _fonteTexto);
|
|
e.Graphics.DrawString(texto, _fonteTexto, new SolidBrush(Color.White),
|
|
(Width - tamanhoTexto.Width) / 2, (Height - tamanhoTexto.Height) / 2);
|
|
}
|
|
}
|
|
}
|
|
}
|