2011-08-21 70 views
1

我有下面的代码,更新我的进度栏在视觉C锐利。它工作正常,酒吧移动的每个百分比。但我也有我从另一个网站上的帖子得到的代码,这是假设将进度条值放在进度条的中间作为百分比。它会显示分钟秒的进度栏值的百分比,但随后会消失。我对c sharp很陌生,并且在pBar值更改后尝试了几个方法,如pBar.update和pBar.refresh。我编辑了一些代码,使其更易于理解。见下文,一旦我报告进度后台工作人员progresschanged执行,再次pBar值的变化,我看到它的变化,并且文本框文本得到更新,但由于某种原因,进一步下面的代码进度条中的%文本被覆盖。再次,我看到了分秒的%。你可以看到我的一些评论,我正在尝试各种事情,看看它是否会重绘%视觉C与背景工作人员锐利的进度条

  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(); 
    } 

回答

3

该代码是错误的。

您需要处理进度条的Paint事件并利用e.Graphics
否则,您的绘图将在控件下次绘制时被覆盖。

一般来说,你不应该使用CreateGraphics()

+0

+1。一个更符合标准接口约定的解决方案是使用百分比标签,而不是将其叠加到进度条的顶部。 –

+1

@Adam:确实,虽然内联标签的进度条有点常见。 – SLaks

+0

我已经结束了它:)我试过它的标签工作正常..嗯。 thx为洞察LOL。 – thanosazlin