2013-01-11 46 views
2

我有一個窗體,其中包含一個用戶控件。此用戶控件具有以下代碼:OnPaint不更新

protected override void OnPaint(PaintEventArgs pe) 
{ 
    base.OnPaint(pe); 
    pe.Graphics.DrawRectangle(
     new Pen(Color.Red, 5 + laenge), 
     new Rectangle(
      new Point(50 + leerzeichen, hoehe), 
      new Size(laenge + 20, 20))); 
} 

和一些更多的代碼,現在可能並不重要。所以當我啓動程序時,它會繪製紅色矩形。在程序開始時,所有變量(langege,leerzeichen,hoehe)都設置爲0。現在,當我按下按鈕時,變量正在改變,但OnPaint不繪製新的矩形?可能是什麼問題呢?我必須以某種方式致電OnPaint嗎?

+2

是否有可能在同一座標上繪製多個矩形? – daryal

+1

嘗試通過調用Invalidate()方法使控件失效。這將激發繪畫例程。 –

+1

請注意您在OnPaint方法中創建的鋼筆漏水!完成後你需要處理它們。 –

回答

5

你需要調用Invalidate(),變化的變量之後(調用OnPaint internaly)

+0

工作,謝謝:) –

0

你不直接調用的OnPaint。

而是,繼承自Win32(InvalidateRect()),控件的區域需要失效(例如通過調用Invalidate()),以使Windows在刷新期間調用控件的OnPaint方法。 (請參見this question

請注意,操作系統只能在應用程序等待Windows消息隊列(即完成處理用戶請求或調用Application.DoEvents())時處理繪製/刷新請求。