某项目(C#)中,用了默认的进度条, 进度的颜色是绿色的,客户提出需要改成灰色的。
常规情况下,WinForm中这个进度条控件(ProgressBar)无法通过设计器中的属性修改颜色,也无法在代码中直接设置某属性进行修改。
网上找到了一个方法:https://stackoverflow.com/questions/778678/how-to-change-the-color-of-progressbar-in-c-sharp-net-3-5
用自定义的一个类,继承C#的进度条类,最后画矩形的时候用灰色填充(最后一行):
/// <summary>
/// 本项目定制的进度条(灰色)
/// </summary>
public class AimProgressBar : ProgressBar
{
public AimProgressBar()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e)
{
Rectangle rec = e.ClipRectangle;
rec.Width = (int)(rec.Width * ((double)Value / Maximum)) - 4;
if (ProgressBarRenderer.IsSupported)
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle);
rec.Height = rec.Height - 4;
e.Graphics.FillRectangle(Brushes.Gray, 2, 2, rec.Width, rec.Height);
}
}
调用:
先在设计器中放一个panel, 然后在代码中新建一个定制进度条之后,把它放进panel即可:
AimProgressBar progress10P = new AimProgressBar();
progress10P.Minimum = 0;
progress10P.Maximum = 10;
progress10P.Step = 1;
progress10P.Value = 0;
panelProgress10P.Controls.Add(progress10P);
progress10P.Dock = DockStyle.Fill;
效果: