198 lines
2.9 KiB
C#
198 lines
2.9 KiB
C#
|
using System;
|
|||
|
using System.Drawing;
|
|||
|
using System.Windows.Forms;
|
|||
|
|
|||
|
namespace RyzStudio.Windows.ThemedForms
|
|||
|
{
|
|||
|
public partial class ProgressBarInner : System.Windows.Forms.UserControl
|
|||
|
{
|
|||
|
protected int minimum = 0;
|
|||
|
protected int maximum = 100;
|
|||
|
protected int value = 0;
|
|||
|
|
|||
|
public ProgressBarInner() : base()
|
|||
|
{
|
|||
|
InitializeComponent();
|
|||
|
|
|||
|
this.Padding = new Padding(0);
|
|||
|
}
|
|||
|
|
|||
|
public int Minimum
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
return minimum;
|
|||
|
}
|
|||
|
set
|
|||
|
{
|
|||
|
if (this.InvokeRequired)
|
|||
|
{
|
|||
|
this.Invoke(new MethodInvoker(() => {
|
|||
|
setMinimum(value);
|
|||
|
}));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
setMinimum(value);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public int Maximum
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
return maximum;
|
|||
|
}
|
|||
|
set
|
|||
|
{
|
|||
|
if (this.InvokeRequired)
|
|||
|
{
|
|||
|
this.Invoke(new MethodInvoker(() => {
|
|||
|
setMaximum(value);
|
|||
|
}));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
setMaximum(value);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public int Value
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
return value;
|
|||
|
}
|
|||
|
set
|
|||
|
{
|
|||
|
if (this.InvokeRequired)
|
|||
|
{
|
|||
|
this.Invoke(new MethodInvoker(() => {
|
|||
|
setValue(value);
|
|||
|
}));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
setValue(value);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public Color BarColour { get; set; } = Color.FromArgb(158, 225, 249);
|
|||
|
|
|||
|
public Color BarTextColour
|
|||
|
{
|
|||
|
get => label3.ForeColor;
|
|||
|
set => label3.ForeColor = value;
|
|||
|
}
|
|||
|
|
|||
|
protected override void OnPaint(PaintEventArgs e)
|
|||
|
{
|
|||
|
base.OnPaint(e);
|
|||
|
|
|||
|
Rectangle canvas = this.DisplayRectangle;
|
|||
|
Graphics g = e.Graphics;
|
|||
|
|
|||
|
if (this.Value > 0)
|
|||
|
{
|
|||
|
decimal result = decimal.Divide(canvas.Width, this.Maximum) * this.Value;
|
|||
|
|
|||
|
canvas.Width = (int)Math.Round(result);
|
|||
|
|
|||
|
g.FillRectangle(new SolidBrush(this.BarColour), canvas);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected void updateText()
|
|||
|
{
|
|||
|
if (label3.InvokeRequired)
|
|||
|
{
|
|||
|
label3.Invoke(new MethodInvoker(() =>
|
|||
|
{
|
|||
|
label3.Text = string.Format("{0}/{1}", this.Value.ToString(), this.Maximum.ToString());
|
|||
|
}));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
label3.Text = string.Format("{0}/{1}", this.Value.ToString(), this.Maximum.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected void setMinimum(int value)
|
|||
|
{
|
|||
|
int m = value;
|
|||
|
if (m < 0)
|
|||
|
{
|
|||
|
m = 0;
|
|||
|
}
|
|||
|
|
|||
|
if (m > this.Maximum)
|
|||
|
{
|
|||
|
m = this.Maximum;
|
|||
|
}
|
|||
|
|
|||
|
if (this.Value < m)
|
|||
|
{
|
|||
|
this.Value = m;
|
|||
|
}
|
|||
|
|
|||
|
if (this.value > this.Maximum)
|
|||
|
{
|
|||
|
this.value = this.Maximum;
|
|||
|
}
|
|||
|
|
|||
|
minimum = m;
|
|||
|
updateText();
|
|||
|
this.Invalidate();
|
|||
|
}
|
|||
|
|
|||
|
protected void setMaximum(int value)
|
|||
|
{
|
|||
|
int m = value;
|
|||
|
if (m < 0)
|
|||
|
{
|
|||
|
m = 0;
|
|||
|
}
|
|||
|
|
|||
|
if (m < this.Minimum)
|
|||
|
{
|
|||
|
m = this.Minimum;
|
|||
|
}
|
|||
|
|
|||
|
if (this.Value > m)
|
|||
|
{
|
|||
|
this.Value = m;
|
|||
|
}
|
|||
|
|
|||
|
if (this.value < this.Minimum)
|
|||
|
{
|
|||
|
this.value = this.Minimum;
|
|||
|
}
|
|||
|
|
|||
|
maximum = m;
|
|||
|
updateText();
|
|||
|
this.Invalidate();
|
|||
|
}
|
|||
|
|
|||
|
protected void setValue(int value)
|
|||
|
{
|
|||
|
int m = value;
|
|||
|
if (m < this.Minimum)
|
|||
|
{
|
|||
|
m = this.Minimum;
|
|||
|
}
|
|||
|
|
|||
|
if (m > this.Maximum)
|
|||
|
{
|
|||
|
m = this.Maximum;
|
|||
|
}
|
|||
|
|
|||
|
this.value = m;
|
|||
|
updateText();
|
|||
|
this.Invalidate();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|