c#WindowsForm自定义控件 渐变颜色的进度条
时间: 2024-02-25 22:52:25 浏览: 73
要实现带有渐变颜色的进度条,可以自定义一个继承自`ProgressBar`的控件,并在控件的`Paint`事件中实现绘制渐变颜色。
以下是一个示例代码:
```csharp
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
public class GradientProgressBar : ProgressBar
{
protected override void OnPaint(PaintEventArgs e)
{
Rectangle rect = ClientRectangle;
if (ProgressBarRenderer.IsSupported)
{
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, rect);
}
rect.Inflate(-3, -3);
if (Value > 0)
{
Rectangle clip = new Rectangle(rect.X, rect.Y, (int)Math.Round((Value / (double)Maximum) * rect.Width), rect.Height);
LinearGradientBrush brush = new LinearGradientBrush(rect, Color.FromArgb(255, 0, 0), Color.FromArgb(0, 255, 0), LinearGradientMode.Horizontal);
e.Graphics.FillRectangle(brush, clip);
}
string text = string.Format("{0}%", Value);
using (Font font = new Font(FontFamily.GenericSansSerif, 10))
{
SizeF size = e.Graphics.MeasureString(text, font);
Point location = new Point(rect.Width / 2 - (int)size.Width / 2, rect.Height / 2 - (int)size.Height / 2);
e.Graphics.DrawString(text, font, Brushes.Black, new PointF(location.X, location.Y));
}
}
}
```
在上面的代码中,我们首先在进度条的背景上绘制了一个灰色的矩形,然后根据当前进度绘制一个渐变色的矩形,最后在中心位置绘制了当前进度的百分比。
在使用时,只需要将进度条控件替换为自定义的`GradientProgressBar`即可。例如:
```csharp
GradientProgressBar progressBar = new GradientProgressBar();
progressBar.Minimum = 0;
progressBar.Maximum = 100;
progressBar.Value = 50;
Controls.Add(progressBar);
```
这样就可以得到一个带有渐变颜色的进度条了。
阅读全文