进度条值只是闪烁并消失
本文关键字:闪烁 消失 | 更新日期: 2023-09-27 18:21:23
我试图将百分比值放入进度条中,但它看起来像眨眼一样,然后消失了。
这是我的ProgressChanged
事件:
C#代码
public void button1_click(object sender, EventArgs e)
{
BackgroundWorker _worker = new BackgroundWorker();
_worker.WorkerReportsProgress = true;
_worker.ProgressChanged += new ProgressChangedEventHandler(_worker_ProgressChanged);
_worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_worker_RunWorkerCompleted);
_worker.DoWork += (s, e2) =>
{
for (int i = 0; i <= xmlnode.Count - 1; i++)
{
_worker.ReportProgress((int)100 * i / (xmlnode.Count - 1));
// Many validations here
}
}
}
void _worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
// Here I tryied to put the percentage value in progress bar
int percent = (int)(((double)progressBar1.Value / (double)progressBar1.Maximum) * 100);
progressBar1.CreateGraphics().DrawString(percent.ToString() + "%", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(progressBar1.Width / 2 - 10, progressBar1.Height / 2 - 7));
}
文本只是在闪烁,因为它没有在Paint
上重新绘制。消耗进度条的Paint
事件,并在其中绘制百分比。只需将百分比存储在类变量中,就可以轻松获取该百分比。
进度条是一个动画控件。当你改变它的百分比时,它会使它的绘制表面无效,并完全重新绘制。这意味着你的百分比只绘制了一帧,然后随着动画的滚动而消失。
要解决此问题,您必须创建一个继承自"控制"或"进度"栏的新控件,并将代码添加到处理百分比写入的OnPaint事件中。通过在OnPaint中,每次控件重新绘制自己时都会执行它,而不仅仅是一次。或者,只需将代理挂接到现有进度条的现有"绘制"事件上,tbh可能更容易。
这看起来像:
//Somewhere during initialisation, this is called once only
progressBar1.Paint+= new PaintEventHandler((object sender, PaintEventArgs e) =>
e.Graphics.DrawString(progressBar1.Value.ToString() + "%", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(progressBar1.Width / 2 - 10, progressBar1.Height / 2 - 7)));