我有以下代码在visual c sharp中更新我的进度条。它工作正常,每个百分比的栏移动。但我也有从另一个网站上的帖子获得的代码,假设将进度条值放在进度条的中间作为%百分比。它会显示分秒的进度条值的百分比,但随后会消失。我是c sharp的新手,在pBar值改变后尝试了几个像pBar.update和pBar.refresh的东西。我编辑了一些代码,以便更容易理解。看到下面,一旦我报告进度后台工作程序progresschanged执行再次pBar值更改我看到它更改,并且文本框文本也得到更新,但由于某种原因,进一步下面的代码绘制进度栏中的%文本会被覆盖某种方式。再一次,我看到%一瞬间。你可以看到我的一些评论,我在尝试各种各样的事情,看它是否会重绘%
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
backgroundWorker1.ReportProgress(10);
collect_long_process();
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
pBar.Value = e.ProgressPercentage;
txtBox_pBar.Text = "Gathering info";
int percent = 10;//(int)(((double)pBar.Value / (double)pBar.Maximum) * 100);
pBar.CreateGraphics().DrawString(percent.ToString() + "%", new Font("Arial", (float)8.25, FontStyle.Regular),
Brushes.Black, new PointF(pBar.Width / 2 - 10, pBar.Height / 2 - 7));
//pBar.Update();
//Application.DoEvents();
}
答案 0 :(得分:3)
那段代码错了。
您需要处理进度条的Paint
事件,并在e.Graphics
上绘制
否则,下次控件自行绘制时,您的绘图将被覆盖。
一般情况下,你不应该使用CreateGraphics()
。