2012-05-17 113 views
2

OK,這裏是我的什麼對進度油漆代碼:ProgressBar Paint方法?

private void timer2_Tick(object sender, EventArgs e) 
    { 
     int percent = progressBar1.Value; 
     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)); 
     progressBar1.Increment(+1); 
     if (progressBar1.Value >= 99) 
     { 
      timer2.Stop(); 
      this.Close(); 
     } 

好了,我畫在它的中間會顯示進度的價值標籤。出於某種原因,它一直在閃爍......消失並重新出現。所以,有人告訴我拿出這些代碼,並把它放在繪畫方法中......我沒有看到它。有更容易的方法嗎?

+1

檢查是否設置'DoubleBuffered'真有什麼差別。 – SimpleVar

+0

其中DoubleBuffered嗎?它是在進度......還是什麼?我是新的,所以...對不起 –

+0

@EliteGamer它的屬性表單本身 – SimpleVar

回答

7

下面是應該工作(我去選項號3,創建一個子類並重寫的WndProc來處理繪製消息代碼:

public class Prog : ProgressBar 
{ 
    protected override void WndProc(ref Message m) 
    { 
     base.WndProc(ref m); 

     if (m.Msg == 0x000F) 
     { 
      var flags = TextFormatFlags.VerticalCenter | 
         TextFormatFlags.HorizontalCenter | 
         TextFormatFlags.SingleLine | 
         TextFormatFlags.WordEllipsis; 

      TextRenderer.DrawText(CreateGraphics(), 
            ((float)this.Value/this.Maximum*100) + "%", 
            Font, 
            new Rectangle(0, 0, this.Width, this.Height), 
            Color.Black, 
            flags); 
     } 
    } 
} 
+0

我如何做數字2? –

+0

Elite Gamer:爲控件的Paint事件創建一個事件處理函數。在事件處理程序體中,使用PaintEventArgs參數中的Graphics對象來執行繪製。請注意,Paint事件可能會多次引發,即使在您的計時器的兩個滴答聲之間。 – Libor

+0

我沒有看到進度條的油漆東西? –