某项目(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;

效果:

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐