系统.Drawing.Graphics的默认构造函数被移除了吗?

7
当我尝试创建一个Graphics对象时,为什么以下代码不起作用?
System.Drawing.Graphics graphicsObj = new System.Drawing.Graphics();

我知道如果想让它起作用,可以创建一个private System.Windows.Forms.Panel Obj;然后执行CreateGraphics()

我尝试查找Graphics的自定义构造函数,但是没有找到。Microsoft是在哪里定义它的,或者它是如何被阻止的?

3个回答

11

如果没有其他已声明的构造函数,C#编译器才会创建默认构造函数。在这种情况下,似乎所有构造函数都是内部或私有的。基本上,您不会自己构建它 - 您可以从图像、控件或其他地方请求一个,或者在绘画事件等情况下获得一个。


3
很显然,Graphics不能有默认构造函数。你总是希望你绘制的内容在某个地方可见。默认构造函数无法选择绘图的目标。
获取Graphics对象的方式:
  • Graphics.FromImage()。你将绘制到位图中。通常用于调整图像大小或创建“画布”。
  • Control.CreateGraphics()。让你直接在屏幕上绘制。这种方法总是不正确的,应该使用:
  • Paint事件。e.Graphics参数允许你在屏幕上绘制。
  • PrintPage事件。对于PrintDocument类,e.Graphics最终会出现在一张纸上。
  • Graphics.FromHdc()。在低级P/Invoke代码中使用,绘制到Windows设备上下文。
  • Graphics.FromHwnd()。与上述相同,直接绘制到本地窗口。
总之:
  • 使用Paint事件在屏幕上绘制
  • 使用PrintPage事件在打印机上绘制
  • 使用FromImage()在位图上绘制

0

微软没有提供Graphics对象的构造函数。创建实例的唯一方法是通过静态方法,例如CreateGraphics()或FromImage()。这就是为什么你的代码不起作用的原因。此外,值得一提的是,Graphics对象不能被继承。


4
实际上,微软确实给了Graphics类构造函数,否则编译器会生成一个公共默认构造函数。微软只是没有将他们添加的任何构造函数公开。 - Chris Taylor
同意!确实有构造函数。只是没有可以公开访问的构造函数。 - Icemanind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接