如何在进度条控件上显示文本,并保留原始背景

时间:2016-04-03 17:33:29

标签: c# winforms progress-bar

覆盖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%)[指出背景根本没有画出来。 ]:

enter image description here

如果我创建一个新的Label控件并将其背景设置为Color.Transparent并将其设置为Full,则会得到与上述相同的结果。

有很多关于如何添加文本和绘制自定义进度条样式的示例,但是我希望保持原始进度条的视觉效果,而无需重新发明轮子。进度部分工作正常,我对原生风格很满意,不希望重新绘制我自己的自定义改编。我只想在上面叠加文字。

我考虑过Timer控制/等等,但我也希望尽可能少地使用这些资源。

以下是我已经完成的一些资源:

我正在使用c#,控件是一个扩展.NET本机ProgressBar控件的自定义控件。

更新

我将使用此部分发布正在进行的研究,因为我发现了更多相关的不同数据。

1 个答案:

答案 0 :(得分:-1)

覆盖OnLoad并调用SetStyle(ControlStyles.AllPaintingInWmPaint,false)和SetStyle(ControlStyles.UserPaint,true)。这将分离背景和控制细节图。