前言
C# 自带的进度条缺少数值显示,且外观单一,可以通过自定义控件重写一个进度条功能;
一、创建自定义控件项
1.在项目中新建项(不懂的可以看新建Button那篇文章);
2.在弹出窗口中,选择Windows Forms -->自定义控件-->修改名称(myProgress.cs)-->添加;
3.继承类改为Control,当前项就创建完成了。
二、修改代码
1.显示百分比
bool showPercent = false;
[Category("Behavior1")]
[Description("显示百分比")]
public bool ShowPercent
{
get { return showPercent; }
set
{
showPercent = value;
Invalidate();
}
}
float showPercentPos = 50;
[Category("Behavior1")]
[Description("百分比显示位置(%)")]
public float ShowPercentPos
{
get { return (int)showPercentPos; }
set
{
showPercentPos = value;
Invalidate();
}
}
2.边框设置
int borderWidth = -1;
[Category("Behavior1")]
[Description("边框宽度")]
public int BorderWidth
{
get { return borderWidth; }
set
{
borderWidth = value;
pen.Width = borderWidth;
Invalidate();
}
}
Color borderColor = Color.Black;
[Category("Behavior1")]
[Description("边框颜色")]
public Color BorderColor
{
get { return borderColor; }
set
{
borderColor = value;
pen.Color = borderColor;
Invalidate ();
}
}
3.值设置
double value = 24;
[Category("Behavior1")]
[Description("当前值")]
public double Value
{
get { return value; }
set
{
this.value = value;
Invalidate();
}
}
private double max = 100;
[Category("Behavior1")]
[Description("最大值")]
public double Max
{
get { return max; }
set
{
max = value;
Invalidate();
}
}
private double min = 0;
[Category("Behavior1")]
[Description("最小值")]
public double Min
{
get { return min; }
set
{
min = value;
Invalidate();
}
}
4.其他设置
Color bColor = Color.Lime;
[Category("Behavior1")]
[Description("背景颜色")]
public Color BColor
{
get { return bColor; }
set
{
bColor = value;
Invalidate();
}
}
Font strfont = new Font("宋体", 12);
[Category("Behavior1")]
[Description("显示字体")]
public Font StrFont
{
get { return strfont; }
set
{
strfont = value;
Invalidate();
}
}
三、修改功能代码
添加对应属性的功能代码
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
//显示最大最小值
double showData = 0;
if (Max <= 0)
showData = 1;
else
{
showData = this.Value / Max;
if (showData > 1) showData = 1;
if (showData < 0) showData = 0;
if(value > max) value = max;
if(value < min) value = min;
}
//显示百分比
if (ShowPercent)
{
pe.Graphics.FillRectangle(new SolidBrush(bColor), ClientRectangle);
if(borderWidth > 0)
{
pe.Graphics.DrawRectangle(pen, ClientRectangle.X + (pen.Width - 1), ClientRectangle.Y + (pen.Width - 1), ClientRectangle.Width - (2 * pen.Width - 1), ClientRectangle.Height - (2 * pen.Width - 1));
}
pe.Graphics.FillRectangle(new SolidBrush(Color.Lime), ClientRectangle.X + pen.Width, ClientRectangle.Y + pen.Width, (float)(showData * ClientRectangle.Width - 2 * pen.Width), ClientRectangle.Height - 2 * pen.Width);
//显示数字
SizeF fontSize = pe.Graphics.MeasureString(showData.ToString("p2"), strfont);
pe.Graphics.DrawString(showData.ToString("p2"), strfont, new SolidBrush(ForeColor), (float)(ClientRectangle.Width - fontSize.Width)*(showPercentPos/100), (ClientRectangle.Height - fontSize.Height) / 2);
return;
}
//不显示百分比
pe.Graphics.FillRectangle(new SolidBrush(Color.Lime), ClientRectangle.X, ClientRectangle.Y + pen.Width, (float)(showData * ClientRectangle.Width ), ClientRectangle.Height - 2 * pen.Width);
}
四、最终样式
调用方法和正常控件相同(可以直接调用progress1.Value)。
五、声明
此方法是基于本人现工作内容总结,包括网络查询学习内容,如有侵权请告知。