2013-02-22 97 views
1

當窗體加載時應該不是CreateGraphics()返回一個圖形對象?Windows窗體中的圖形

我的意思是,在Form1_Load事件中,我可以寫下例如以下內容嗎?

Graphics x; 
private void Form1_Load(object sender, EventArgs e) 
{ 
    x = this.CreateGraphics(); 
} 

如果不是,那麼爲什麼?

我認爲當你創建一個新表單時,constructor會啓動表單的所有對象。那麼爲什麼不是圖形對象呢?

我在問,因爲當我試圖繪製form_load時,它不會顯示我繪製的內容。

主要原因是:我想創建一個遊戲,它有一個棋盤 - 所以當用戶點擊新遊戲時 - 首先 - 我正在啓動棋盤並繪製它。 而在onPaint事件中,我只想畫出板子的當前狀態。所以我認爲董事會的初始狀態應該利用表格加載事件。

+0

你會想創建一個執行該繪製的方法。然後在你的構造函數中你可以調用這個方法。在創建該類時,您的抽籤被調用。我沒有時間提供示例,但後來我會演示如果沒有提供好的答案。 – Greg 2013-02-22 21:59:28

+0

看起來你需要閱讀這個相當可愛[FAQ](http://www.bobpowell.net/gdiplus_faq.htm) – Quibblesome 2013-02-22 23:23:35

回答

4

您不應該以這種方式使用Graphics對象;你應該把它的每個用法都放在一個使用塊中,否則確保你在每一組繪圖操作之後處理掉它。你的代碼會在這裏留下一個不必要的Graphics對象。

簡單的例子:

private void MyonPaintOverload() 
{ 
    using(Graphics x = this.CreateGraphics()) 
    { 
     // draw here... 
    } 
} 

此外,借鑑Form_Load()將無法​​正常工作,因爲窗口是不是在這一點上確實可見;基本上沒有什麼可以利用的。

是的,你一般需要重繪整個事情每個週期 - 因爲另一個窗口簡單的東西被在你的窗口拖出會「消滅」你的圖紙,而當它被其它窗口無效被搬走,您需要重新繪製您手動繪製的所有內容

+0

感謝您的回答,我編輯了我的問題 – Elior 2013-02-22 22:09:49

+0

@Elior更新了答案。 – 2013-02-22 22:12:35

+0

所以可以說我在該板上有兩個圈子。所以如果我改變 其中一個圈子的位置,我需要重新繪製所有的棋盤? 這不是很有效,不是嗎? 好的,但我明白並接受你的回答,因爲你是對的。 – Elior 2013-02-22 22:18:43