我是Windows 编程新手。在 C# 中,我正在使用 Visual Studio 2017。现在,我遇到了一个问题。问题是,我试图在其中显示一些文本(进度值),ProgressBar
但StatusStrip
找不到合适的工作方式来做到这一点。:-(
谁能给我一些想法或解决这个问题的方法?我会很高兴和感谢你!您的回答将不胜感激。:-)
我是Windows 编程新手。在 C# 中,我正在使用 Visual Studio 2017。现在,我遇到了一个问题。问题是,我试图在其中显示一些文本(进度值),ProgressBar
但StatusStrip
找不到合适的工作方式来做到这一点。:-(
谁能给我一些想法或解决这个问题的方法?我会很高兴和感谢你!您的回答将不胜感激。:-)
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);
}
}
}
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));
就在几天前,我遇到了同样的问题,遇到了这段完美地完成工作的小代码 :)
从这个网站获得了代码和解释