覆盖OnPaint()
和OnPaintBackground()
事件时如下:
protected override void OnPaint( PaintEventArgs e ) {
base.OnPaint( e );
try {
switch ( TextVisibility ) {
case ProgressBarTextVisibility.None:
return;
case ProgressBarTextVisibility.CustomText:
if ( progressText=="" ) { return; }
break;
case ProgressBarTextVisibility.Percentage:
progressText = Value.ToString()+"%";
break;
}
SizeF charSize = e.Graphics.MeasureString( progressText, ProgressFont );
e.Graphics.DrawString(
progressText,
ProgressFont,
new SolidBrush(ProgressTextColor),
new PointF(
Width/2-( charSize.Width/2.0F ),
Height/2-( charSize.Height/2.0F )
)
);
} catch ( Exception ee ) {
}
}
protected override void OnPaintBackground( PaintEventArgs pevent ) {
base.OnPaintBackground( pevent );
}
结果就是这样(进度条为50%)[指出背景根本没有画出来。 ]:
如果我创建一个新的Label
控件并将其背景设置为Color.Transparent
并将其设置为Full
,则会得到与上述相同的结果。
有很多关于如何添加文本和绘制自定义进度条样式的示例,但是我希望保持原始进度条的视觉效果,而无需重新发明轮子。进度部分工作正常,我对原生风格很满意,不希望重新绘制我自己的自定义改编。我只想在上面叠加文字。
我考虑过Timer
控制/等等,但我也希望尽可能少地使用这些资源。
以下是我已经完成的一些资源:
我正在使用c#,控件是一个扩展.NET本机ProgressBar控件的自定义控件。
我将使用此部分发布正在进行的研究,因为我发现了更多相关的不同数据。
DrawMode
VisualStyleElement.ProgressBar.Bar
课程中猜到的可能存在的信息。答案 0 :(得分:-1)
覆盖OnLoad并调用SetStyle(ControlStyles.AllPaintingInWmPaint,false)和SetStyle(ControlStyles.UserPaint,true)。这将分离背景和控制细节图。