[C#]Öffentliche Methode um auf ein Graphics-Object zuzugreifen

GeHo

Erfahrenes Mitglied
Hallo,
ich will erreichen, dass meine Form1-Klasse eine Methode veröffentlicht, mit der ich in ein graphics-Object (von PictureBox1) einen Kasten zeichne. Auf diese Methode möchte ich auch außerhalb der Form1-Klasse zugreifen können.
Mein Grundgerüst sieht so aus:
Code:
public partial class Form1 : Form
{
  ...
    public void drawBlock( )
    {
      Graphics graph = PictureBox1.CreateGraphics();
      graph.DrawRectangle(new Pen(Brushes.Blue, 10), 20, 20, 100, 100);
    }
  ...
}
Die Methode als "static" zu bezeichnen, bringt ein Kompilierungsfehler, weil nicht auf das nicht-statische Feld Form1.PictureBox1 zugegriffen werden kann.
Schreibe ich noch ein this vor PictureBox1 gibt es ein Kompilierungsfehler, weil ich keine this-Referenz in einer statischen Methode benutzen darf.
Wie kann ich eine Methode, wie sie oben beschrieben wurde, realisieren?
 

PhoenixLoe

Erfahrenes Mitglied
Ich verstehe ehrlich gesagt das Problem nicht so ganz. Das, was du geschrieben hast, ist doch bereits die Antwort auf deine Frage. Denn die Methode statisch zu machen, scheitert daran, dass du die Klasse auf jeden Fall instanziieren musst, um eine gültige PictureBox zu bekommen.
Wenn du es so machst, wie du es geschrieben hast, kannst du die Methode auch außerhalb von Form1 aufrufen, indem du ein Form1-Objekt verwendest.
Falls dies dein Problem nicht löst, könntest du es noch etwas genauer schildern?

Gruß
PhoenixLoe
 

GeHo

Erfahrenes Mitglied
Danke für die Antwort, aber mittlerweile hab ich selbst eine Lösung gefunden.
Ich denke du hast das Problem auch richtig verstanden. Mir ist nur unklar gewesen, dass es die Möglichkeit gibt "Form1-Objekte" zu verwenden und wie man das praktisch umsetzt.
Hier nochmal meine Lösung:
Code:
public partial class Form1 : Form
{
  ...
    private void frmMain_Paint( object sender, PaintEventArgs e )
    {
        Balls.Draw(e);
    }
  ...
}
class Ball
{
  ...
    public void Draw( PaintEventArgs e )
    {  
      Rectangle rect = new Rectangle((int)Location.X,(int)Location.Y ,
                                      Measurements.Width, Measurements.Height); 
      e.Graphics.FillRectangle(fillColor, rect);
    }
  ...
}
 
Zuletzt bearbeitet:

Alexander Schuc

crazy-weasel
Hi.

Wenn du nur das Graphics-Objekt übergeben würdest, wäre es noch schöner. Dann kannst du dir deine Bälle auch in ein Bitmap zeichnen lassen. (z.b.)

lg, Alex