【问题标题】:How is the default constructor of System.Drawing.Graphics removed?System.Drawing.Graphics 的默认构造函数是如何去掉的?
【发布时间】:2011-02-22 09:28:58
【问题描述】:

当我尝试创建 Graphics 的对象时,为什么以下操作不起作用?

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

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

我试图为 Graphics 找到一个自定义构造函数,但我找不到。微软在哪里定义它,或者它是如何阻止它的?

【问题讨论】:

    标签: c# .net graphics constructor default-constructor


    【解决方案1】:

    只有在没有其他声明的构造函数时,C# 编译器才会创建默认构造函数。在这种情况下,看起来所有构造函数都是内部的或私有的。基本上你不会自己构建一个 - 你从图像、控件或其他东西中请求一个,或者为绘画事件等获得一个。

    【讨论】:

      【解决方案2】:

      Microsoft 没有给出 Graphics 对象的构造函数。创建实例的唯一方法是通过静态方法,例如 CreateGraphics() 或 FromImage()。这就是您的代码不起作用的原因。此外,作为旁注,不能继承 Graphics 对象。

      【讨论】:

      • 其实微软确实给了Graphics类的构造函数,否则编译器会生成一个公共的默认构造函数。微软只是没有公开他们添加的任何构造函数。
      • 同意!确实有构造函数。只是没有一个可以公开访问
      【解决方案3】:

      很明显,Graphics 不能有默认构造函数。你总是希望你画的东西在某处可见。默认构造函数无法选择绘图的目的地。

      Graphics 对象的获取方式:

      • Graphics.FromImage()。您将绘制成位图。在调整图像大小或创建“画布”时很常见。
      • Control.CreateGraphics()。让我们直接在屏幕上绘制。总是错的,改用:
      • 绘画事件。 e.Graphics 参数可让您绘制到屏幕上。
      • PrintPage 事件。对于 PrintDocument 类,e.Graphics 最终出现在一张纸上。
      • Graphics.FromHdc()。在低级 P/Invoke 代码中使用,绘制到 Windows 的设备上下文。
      • Graphics.FromHwnd()。如上,直接绘制到原生窗口。

      总结:

      • 使用 Paint 事件绘制到屏幕
      • 使用 PrintPage 事件绘制到打印机
      • 使用FromImage() 绘制位图

      【讨论】:

        猜你喜欢
        • 2016-07-23
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多