在 StatusStrip 中的进度条上显示文本

HN *_*ner 2 .net c# statusstrip winforms progress-bar

我是Windows 编程新手。在 C# 中,我使用 Visual Studio 2017。现在,我遇到了一个问题。问题是,我试图在 中显示一些文本(进度值),ProgressBarStatusStrip找不到正确的工作方法来做到这一点。:-(

任何人都可以为我提供一些想法或解决方案来解决这个问题吗?我会很高兴并感谢你!您的回答将不胜感激。:-)

Rez*_*aei 7

ToolStripProgressBar组件使用 aProgressBar显示进度,控件不显示文本。为了能够呈现用于控制的文本,您需要自己绘制该值。为此,您可以创建一个派生自 的自定义项目ToolStripProgressBar。然后您可以使用为控件的消息NativeWindow分配自定义代码:WM_PAINT

在此输入图像描述

using System;
using System.Windows.Forms;
using System.Windows.Forms.Design;
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.All)]
public class MyToolStripProgressBar : ToolStripProgressBar
{
    public MyToolStripProgressBar() : base()
    {
        this.Control.HandleCreated += Control_HandleCreated;
    }
    private void Control_HandleCreated(object sender, EventArgs e)
    {
        var s = new ProgressBarHelper((ProgressBar)this.Control);
    }
}
public class ProgressBarHelper : NativeWindow
{
    ProgressBar c;
    public ProgressBarHelper(ProgressBar progressBar)
    {
        c = progressBar;
        this.AssignHandle(c.Handle);
    }
    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
        if (m.Msg == 0xF /*WM_PAINT*/)
        {
            using (var g = c.CreateGraphics())
                TextRenderer.DrawText(g, c.Value.ToString(),
                   c.Font, c.ClientRectangle, c.ForeColor);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @P.Pat 是的,不推荐。它在 Windows 桌面应用程序设计指南→[进度条](https://msdn.microsoft.com/en-us/library/windows/desktop/dn742475(v=vs.85).aspx) 中说明:*不要将完成百分比或任何其他文本放在进度条上。此类文本不可访问且与使用主题不兼容。不正确* (2认同)
  • 哦哇!我什至不知道你能做到这一点!重写控件的WndProc而不继承!?为精彩点赞。 (2认同)