大家好,.net默认的ProgressBar控件是没有百份比的...所以我也动手自己写一个(完成后的效果如下图):

(一)实现目的:
1.实现渐变颜色设置
2.边框颜色,
3.垂直,水平显示
3.可以自定义百份比
(二)实现关键
简单点来说,控件是画出来的...
Graphics类里有很多的画图函数...
(1)画四边框函数:g.DrawRectangle(Pen, Rectangle);
(2)画四方体函数:g.FillRectangle(Brush, Rectangle);
画渐变的画刷是这样:
LinearGradientBrush brush_1 = new LinearGradientBrush(tmp1,this.ColorIn, this.ColorOut, LinearGradientMode.Vertical);
(3)写文本函数:g.DrawString(string,Font,Brush,x,y,StringFormat);
System.Drawing.StringFormat drawFormat = new StringFormat(StringFormatFlags.DirectionVertical);//画垂直文本的设置模式
SizeF Str_size = g.MeasureString(this.Text, this.Font);
float x = (this.ClientRectangle.Width - Str_size.Height) / 2 + this.ClientRectangle.X;
float y = (this.ClientRectangle.Height - Str_size.Width) / 2 + this.ClientRectangle.Y;
if (this.isShadow)//画阴影
{
SolidBrush ShadowBrush = new SolidBrush(Color.FromArgb(150, Color.Black));//特殊画刷,画阴影
g.DrawString(this.Text, this.Font, ShadowBrush, x + 1, y + 1,drawFormat);//这是画文本函数
ShadowBrush.Dispose();
}
SolidBrush TextBrush = new SolidBrush(this.ForeColor);
g.DrawString(this.Text, this.Font, TextBrush, x, y,drawFormat);
TextBrush.Dispose();
(三)画图一般都是再重写OnPaint函数里来实现:
protected override void OnPaint(PaintEventArgs e)
{
if (!this.IsDisposed)
{
if (this.Sketchpad == null)
{
this.DrawBorder();//初始化与画边
}
Image img = new Bitmap(this.Sketchpad);
Graphics g = Graphics.FromImage(img);
if (this.DisplayStyle == ProgressDisplayStyle.Horizontal)//水平
{
this.DrawHorizontal(g);
g.TextRenderingHint = TextRenderingHint.AntiAlias;
this.DrawStringV(g);
}
else //垂直
{
this.DrawVertical(g);
g.TextRenderingHint = TextRenderingHint.AntiAlias;
this.DrawStringH(g);
}
e.Graphics.DrawImage(img, this.ClientRectangle);
img.Dispose();
g.Dispose();
}
}
还要注意一个问题:this.Invalidate();函数会引发OnPaint函数
现在我还不能上传文件的地方,源代码先不上传。。
有什么问题大家请留言。。
本文介绍如何动手创建一个自定义的ProgressBar控件,该控件具备水平和垂直显示、渐变颜色以及显示百分比的功能。通过使用Graphics类的画图函数,如DrawRectangle、FillRectangle和DrawString,实现了控件的绘制,包括边框、填充和文本显示。在OnPaint事件中处理了水平和垂直布局的绘制,并特别提到Invalidate()函数在更新显示中的作用。由于条件限制,源代码未能一同提供。
710

被折叠的 条评论
为什么被折叠?



