2013-04-04 38 views
0

我試過設置ResizeRedraw,但它不會導致調整大小的繪畫事件,所以我開始在myForm_Resize內部無效。現在,當我調整大小時,我發現我的背景正在重新繪製,但只要我停止調整大小,我的控件就會以其背景顏色重新繪製。我究竟做錯了什麼?畫的表單內容不會留漆

private void pbox_Paint(object sender, PaintEventArgs e) { 
    Rectangle boardRect = pbox.ClientRectangle; 
    using (Graphics g = pbox.CreateGraphics()) { 
     g.FillRectangle(Brushes.Orange, boardRect); 
    } 
} 

private void myForm_Resize(object sender, EventArgs e) { 
    this.Invalidate(true); 
} 

回答

2

注意,有在創造Paint事件處理Graphics對象是沒有意義的。您應該使用PaintEventArgs中的現有Graphics對象。像這樣改變你的代碼,它現在應該工作:

private void pbox_Paint(object sender, PaintEventArgs e) 
{ 
     Rectangle boardRect = pbox.ClientRectangle; 
     e.Graphics.FillRectangle(Brushes.Orange, boardRect); 
} 
+0

這適用於保持我的內容畫。任何想法爲什麼ResizeRedraw不會觸發我的Paint事件? – mike663 2013-04-04 01:33:11

+0

它觸發,檢查調試器,但使用CreateGraphics是不穩定的,隨後控制本身的重繪將取消它。嘗試使用Button之類的窗體上的任何其他控件。 CreateGraphics僅在需要繪製直到下一次重繪時纔可見的東西時使用,在任何其他情況下,您都應該使用Paint事件處理函數中的PaintEventArgs中的圖形或OnPaint方法的重寫。 – 2013-04-04 01:39:52