2011-03-18 59 views
4

我看過的地方,CreateGraphics()會做這個步驟我們:的createGraphics()方法和Paint事件參數

  1. BeginPaint的
  2. 繪圖
  3. 調用EndPaint

我有這樣的代碼這樣的:

private void Form1_Load(object sender, EventArgs e) 
{ 
    grFrom = this.CreateGraphics(); 
    grFrom.FillRectangle(Brushes.Red, this.ClientRectangle); 
} 

沒有紅色的矩形......但是,當我在Form1_paint下面複製下面的行時,每件事情都可以正常運行。

grFrom.FillRectangle(Brushes.Red, this.ClientRectangle); 

所以問題就在這裏: 什麼是Form1_painte.Graphics

CreateGraphics or e.Graphics

回答

5

兩件事情:

  1. CreateGraphics爲您提供了一個圖形對象,你應該總是Dispose()退出之前。你應該把你的語句放在一個使用塊中。
  2. 您繪製的圖形只有在表單重新繪製之後纔有效。在你的情況下,通過在Form_Load中調用它,它發生在第一次渲染之前,並被「扔掉」。你應該總是把它放在OnPaint()中,以便讓它在屏幕上「持久」,因爲當控件重繪時會導致它重繪。
0

您正在創建一個新的圖形對象,它最有可能由內存緩衝區支持。您從e.Graphics獲得的圖形對象由一個緩衝區支持,該緩衝區表示當前窗口(如窗口句柄中的窗口,而不是帶標題欄的窗口等)的屏幕區域。

您始終可以將來自創建的圖形對象的數據與位於e.Graphics之間的數據進行比較。

我相信有人會闡述比我更多的東西。

1

您的表單加載調用正在繪製到表單,但隨後第一個常規表單繪畫事件將其寫入其中,因此您從不會看到它。 (由於這種情況您的形式呈現在衆人面前)

所以問題就在這裏:什麼是form1_paint的

e.Graphics?

CreateGraphics or e.Graphics?

我相當確定是equivilent,你需要的是更好的理解windows窗體事件生命週期。

此答案的相關鏈接: WinForms event life cycle