2017-05-09 4 views
0

Ich arbeite mit Grafiken in Windows Forms. Ich muss das Formular selbst (mit dem Namen form1) übergeben, das die Grafikklasse Grafika() aufruft, so dass ich während der Zeichnung form1.CreateGraphics() verwenden kann, um auf dieses spezifische Formular zu zeichnen.übergeben Formular als ein Argument für Grafiken C#

Der Konstruktor für die Grafikklasse sieht Grafika wie folgt aus:

public Grafika(ref Form predan) 
{ 
    grafika=predan.CreateGraphics(); 
    //drawing on the form 
} 

Wie ein Formular an den Konstruktor von Grafika so passieren, dass ich es nicht verwenden kann?

+2

Versuchen Sie nicht, ein Graphics-Objekt cachen:

//From Form1 Grafika g = new Grafika(this); //If called from the From, 'this' will be the form itself 

Auch Konstruktor sollte wie folgt aussehen! – TaW

+1

Code, der 'CreateGraphics' aufruft, ist zu 99,9% wahrscheinlich falsch. Ich sehe keinen Grund zu der Annahme, dass dies eine Ausnahme ist. Alle Zeichnungen sollten als Reaktion auf das Ereignis 'Paint' erstellt werden, das Ihnen ein 'Graphics'-Objekt zur Verfügung stellt. –

+0

Es macht Sinn, das e.Graphics-Objekt an Methoden oder Klassen zu übergeben, die die eigentliche Zeichnung ausführen, aber es dort nicht speichern (wo es bald ungültig wird), geschweige denn, eine vorübergehende neue zu erstellen, die wahrscheinlich ordnungsgemäß funktioniert. – TaW

Antwort

0

Wenn Sie es übergeben müssen zusammen nicht ref verwenden. Wenn Sie das ref entfernen können Sie es wie so passieren:

public Grafika(Form1 predan)//Notice Form1 instead of just Form 
{ 
    grafika=predan.CreateGraphics(); 
    //drawing on the form 
} 
+0

Ich habe das versucht, aber ich habe "Stichwort 'das ist nicht im aktuellen Kontext verfügbar", nach mehr Forschung fand ich heraus, dass ich es aus einer Methode des Formulars, nicht außerhalb nennen muss. TY, um mich auf die richtige Spur zu bringen. –

+0

Ja, wenn die Klasse in Form1 erstellt wird. Froh, dass es geholfen hat! – EpicKip

0

Auf die gleiche Weise, wie Sie gepostet haben, akzeptiert Ihr Konstruktor einen Parameter dieses spezifischen Formulars. Aber Sie brauchen das Schlüsselwort ref nicht, da Form vom Referenztyp selbst ist. Hier Form1 ist ein spezifisches Form Objekt, das Sie eine Form dieses Namens haben unter Berücksichtigung

public Grafika(Form1 predan) 
{ 
    grafika=predan.CreateGraphics(); 
    //drawing on the form 
} 
Verwandte Themen