2010-05-21 42 views
6

當我嘗試創建一個Graphics對象時,爲什麼以下不工作?System.Drawing.Graphics的默認構造函數是如何去除的?

System.Drawing.Graphics graphicsObj = new System.Drawing.Graphics(); 

(我知道我可以創建一個private System.Windows.Forms.Panel Obj;,然後做CreateGraphics(),如果我想它的工作)

我試圖找到圖形自定義構造函數,但我找不到一個。微軟如何定義它,或者它是如何阻止它的?

回答

10

如果沒有其他聲明的構造函數,則默認的構造函數只能由C#編譯器創建。在這種情況下,它看起來像所有的構造函數是內部的或私有的。基本上你不會自己構建一個 - 你從一個圖像,控制或任何其他要求,或得到一個繪畫事件等。

0

微軟沒有給出Graphics對象的構造函數。創建實例的唯一方法是通過靜態方法,如CreateGraphics()或FromImage()。這就是爲什麼你的代碼不起作用。另外,作爲旁註,Graphics對象不能被繼承。

+4

其實微軟確實給了Graphics類的構造函數,否則編譯器會產生一個公共的默認構造函數。微軟公司沒有製造任何他們添加的構造函數。 – 2010-05-21 14:30:31

+0

同意!確實有建設者。只是沒有可以公開訪問的東西 – Icemanind 2010-05-25 15:47:27

3

直觀上顯而易見的是,Graphics不能有默認的構造函數。你總是希望你畫的東西在某個地方可見。默認構造函數無法選擇圖形的目標。

方式來獲得一個圖形對象:

  • Graphics.FromImage()。你會畫一個位圖。調整圖像大小或創建「畫布」時常見。
  • Control.CreateGraphics()。讓我們直接畫到屏幕上。總是錯的,而是使用:
  • 繪畫事件。 e.Graphics參數可讓您在屏幕上繪圖。
  • PrintPage事件。對於PrintDocument類,e.Graphics最終放在一張紙上。
  • Graphics.FromHdc()。用於低級P/Invoke代碼,繪製到Windows的設備上下文中。
  • Graphics.FromHwnd()。如上所述,直接繪製到本地窗口。

總結:

  • 繪製與Paint事件屏幕
  • 繪製與PrintPage事件打印機
  • 繪製成位圖與FromImage()