2

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

谁能给我一些想法或解决这个问题的方法?我会很高兴和感谢你!您的回答将不胜感激。:-)

4

2 回答 2

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);
        }
    }
}
于 2017-03-31T11:12:17.977 回答
3
  progressBar1.CreateGraphics().DrawString(progressBar1.Value.ToString(), new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(progressBar1.Width / 2 - 10, progressBar1.Height / 2 - 7));

就在几天前,我遇到了同样的问题,遇到了这段完美地完成工作的小代码 :)
这个网站获得了代码和解释

于 2017-03-31T10:22:46.340 回答