2010-05-21 46 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()