2010-05-21 3 views
6

Lorsque j'essaie de créer un objet de Graphics, pourquoi ce qui suit ne fonctionne-t-il pas?Comment le constructeur par défaut de System.Drawing.Graphics est-il supprimé?

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

(je sais que je pourrais créer un private System.Windows.Forms.Panel Obj; puis faire CreateGraphics() si je voulais travailler)

J'ai essayé de trouver un constructeur personnalisé pour Graphics, mais je ne pouvais pas trouver un. Où Microsoft l'a-t-il défini ou comment l'a-t-il bloqué?

Répondre

10

Les constructeurs par défaut sont créés uniquement par le compilateur C# s'il n'y a pas d'autres constructeurs déclarés. Dans ce cas, il semble que tous les constructeurs soient internes ou privés. Fondamentalement, vous n'en construisez pas vous-même - vous en demandez un à partir d'une image, contrôle ou autre, ou en obtenir un pour des événements de peinture, etc

0

Microsoft n'a pas donné les constructeurs d'objets graphiques. La seule façon de créer une instance consiste à utiliser les méthodes statiques, telles que CreateGraphics() ou FromImage(). C'est pourquoi votre code ne fonctionne pas. En outre, en tant que sidenote, l'objet Graphics ne peut pas être hérité de.

+4

En fait, Microsoft a donné les constructeurs de classe Graphics, sinon le compilateur aurait généré un constructeur public par défaut. Microsoft n'a tout simplement pas rendu publics les constructeurs qu'ils ont ajoutés. –

+0

D'accord! Il y a, en effet, des constructeurs. Juste aucun qui peut être accessible au public – Icemanind

3

Il est intuitivement évident que Graphics ne peut pas avoir de constructeur par défaut. Vous voulez toujours que ce que vous dessinez soit visible quelque part. Un constructeur par défaut n'a pas pu sélectionner la destination du dessin.

façons d'obtenir un objet graphique:

  • Graphics.FromImage(). Vous allez dessiner dans un bitmap. Commun lors du redimensionnement d'images ou pour créer une "toile".
  • Control.CreateGraphics(). Laissez-vous dessiner directement à l'écran. Toujours incorrect, utilisez plutôt:
  • Événement de peinture. L'argument e.Graphics vous permet de dessiner à l'écran.
  • Événement PrintPage. Pour la classe PrintDocument, e.Graphics se retrouve sur une feuille de papier.
  • Graphics.FromHdc(). Utiliser dans le code P/Invoke de bas niveau, dessine dans le contexte d'un périphérique Windows.
  • Graphics.FromHwnd(). Comme ci-dessus, dessine directement dans une fenêtre native.

En résumé:

  • Dessiner à l'écran avec l'événement Paint
  • Dessiner à l'imprimante à l'événement PrintPage
  • Dessiner un bitmap avec FromImage()
Questions connexes