2010-05-21 13 views
6

Cuando intento crear un objeto de Gráficos, ¿por qué no funciona lo siguiente?¿Cómo se elimina el constructor predeterminado de System.Drawing.Graphics?

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

(Soy consciente de que podía crear un private System.Windows.Forms.Panel Obj; y luego hacer CreateGraphics() si quería que funcione)

He intentado encontrar un constructor personalizado para gráficos, pero no pude encontrar uno. ¿Dónde lo definió Microsoft, o cómo lo bloqueó?

Respuesta

10

Los constructores predeterminados solo se crean con el compilador C# si no hay otros constructores declarados. En este caso, parece que todos los constructores son internos o privados. Básicamente, usted no construye uno usted mismo: solicita uno de una imagen, control o lo que sea, u obtiene uno para eventos de pintura, etc.

0

Microsoft no dio los constructores de objetos Graphics. La única forma de crear una instancia es mediante los métodos estáticos, como CreateGraphics() o FromImage(). Es por eso que tu código no funciona. Además, como nota al margen, el objeto Graphics no se puede heredar.

+4

En realidad Microsoft dio los constructores de la clase Graphics, de lo contrario, el compilador habría generado un constructor predeterminado público. Microsoft simplemente no hizo público ninguno de los constructores que agregaron. –

+0

de acuerdo! Hay, de hecho, constructores. Solo ninguno al que se pueda acceder públicamente – Icemanind

3

Es intuitivamente obvio que Graphics no puede tener un constructor predeterminado. Siempre quieres que lo que dibujas sea visible en alguna parte. Un constructor predeterminado no pudo seleccionar el destino del dibujo.

maneras de obtener un objeto Graphics:

  • Graphics.FromImage(). Dibujará en un mapa de bits. Común al cambiar el tamaño de las imágenes o para crear un "lienzo".
  • Control.CreateGraphics(). Vamos a dibujar directamente a la pantalla. Siempre está mal, en su lugar use:
  • Evento de pintura. El argumento e.Graphics te permite dibujar en la pantalla.
  • evento PrintPage. Para la clase PrintDocument, e.Graphics termina en una hoja de papel.
  • Graphics.FromHdc(). Usar en el código de P/Invoke de bajo nivel, se dibuja en un contexto de dispositivo de Windows.
  • Graphics.FromHwnd(). Como se indica arriba, se dibuja directamente en una ventana nativa.

En resumen:

  • Draw a la pantalla con el evento Paint
  • señalar a la impresora con el evento PrintPage
  • Dibuje a un mapa de bits con FromImage()
Cuestiones relacionadas