进度条上的文本自定义控件
一个简单的自定义控件,

引言
这是一个非常简单的进度条自定义控件实现,允许在进度条上显示文本。
背景
多年来,微软制作了一些进度条控件,但它们都缺少一些有用的功能。其中一项功能是在控件上居中显示文本。2008年12月,Jacob Jordan发布了一些代码来实现这一点。
int percent = (int)(((double)(progressBar1.Value - progressBar1.Minimum) /
(double)(progressBar1.Maximum - progressBar1.Minimum)) * 100);
using (Graphics gr = progressBar1.CreateGraphics())
{
gr.DrawString(percent.ToString() + "%",
SystemFonts.DefaultFont,
Brushes.Black,
new PointF(progressBar1.Width / 2 - (gr.MeasureString(percent.ToString() + "%",
SystemFonts.DefaultFont).Width / 2.0F),
progressBar1.Height / 2 - (gr.MeasureString(percent.ToString() + "%",
SystemFonts.DefaultFont).Height / 2.0F)));
}
这是一个很好的解决方案,但必须手动对每个进度条进行操作。我认为直接从窗体设计器拖放预先制作好的自定义控件会更容易,所以我构建了一个控件,它封装了一个进度条,并处理文本的绘制和/或自动绘制百分比。
Using the Code
要使用此控件,只需将CustomControls.dll拖放到您的VS工具箱中,然后像拖放普通进度条一样将控件拖放到您的窗体中即可。
我没有公开进度条的所有属性。我公开的属性有:
int Minimum
int Maximum
int Value
int Step
ProgressBarStyle Style
Color BarColor
(对应于ProgressBar.ForeColor
)
如果您需要访问其他内容,只需更改ProgressBar
控件成员的访问修饰符并重新编译即可。
添加了两个新属性来处理文本
bool ShowPercentage
string CenterText
如果ShowPercentage
为true
,则会自动计算并显示完成百分比,否则将显示CenterText
的值。为了实现这一点,对原始代码进行了一些细微的修改。
private void UpdateText()
{
string s;
if (ShowPercentage)
{
int percent = (int)(((double)(Value - Minimum) /
(double)(Maximum - Minimum)) * 100);
s = percent.ToString() + "%";
}
else
{
if (string.IsNullOrEmpty(CenterText))
{
//Don't draw anything
return;
}
else
{
s = CenterText;
}
}
using (Graphics gr = thePB.CreateGraphics())
{
gr.DrawString(s, Font, new SolidBrush(ForeColor),
new PointF(Width / 2 - (gr.MeasureString(s, Font).Width / 2.0F),
Height / 2 - (gr.MeasureString(s, Font).Height / 2.0F)));
}
}
这是一个非常简单的实现,还有很多改进空间,但对于大多数用途来说,它是一个开箱即用的解决方案。
历史
- 2009年1月14日:初始发布