mirror of
https://github.com/oshima-studios/OshimaGameModule.git
synced 2025-04-22 11:59:35 +08:00
68 lines
2.1 KiB
C#
68 lines
2.1 KiB
C#
namespace Oshima.FunGame.OshimaModes
|
|
{
|
|
public class CustomProgressBar : UserControl
|
|
{
|
|
private double _value = 0;
|
|
private double _maximum = 100;
|
|
private Color _progressColor = Color.Red;
|
|
|
|
public double Value
|
|
{
|
|
get => _value;
|
|
set
|
|
{
|
|
_value = Math.Max(0, Math.Min(value, _maximum)); // 限制值在范围内
|
|
Invalidate(); // 触发重绘
|
|
}
|
|
}
|
|
|
|
public double Maximum
|
|
{
|
|
get => _maximum;
|
|
set
|
|
{
|
|
_maximum = Math.Max(1, value); // 最大值不能小于1
|
|
Invalidate(); // 触发重绘
|
|
}
|
|
}
|
|
|
|
public Color ProgressColor
|
|
{
|
|
get => _progressColor;
|
|
set
|
|
{
|
|
_progressColor = value;
|
|
Invalidate(); // 触发重绘
|
|
}
|
|
}
|
|
|
|
public CustomProgressBar()
|
|
{
|
|
this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint |
|
|
ControlStyles.OptimizedDoubleBuffer, true);
|
|
this.Height = 20; // 设置控件的默认高度
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
base.OnPaint(e);
|
|
|
|
// 计算进度条填充宽度
|
|
double percent = _value / _maximum;
|
|
int fillWidth = (int)(this.Width * percent);
|
|
|
|
// 填充背景(灰色)
|
|
e.Graphics.FillRectangle(Brushes.LightGray, 0, 0, this.Width, this.Height);
|
|
|
|
// 填充进度条(自定义颜色)
|
|
e.Graphics.FillRectangle(new SolidBrush(_progressColor), 0, 0, fillWidth, this.Height);
|
|
|
|
// 可选:绘制进度百分比文字
|
|
string text = $"{_value} / {_maximum}";
|
|
SizeF textSize = e.Graphics.MeasureString(text, this.Font);
|
|
e.Graphics.DrawString(text, this.Font, Brushes.Black,
|
|
(this.Width - textSize.Width) / 2, (this.Height - textSize.Height) / 2);
|
|
}
|
|
}
|
|
}
|