Autor Beitrag
Muetze187
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 30.03.11 14:50 
Hallo Leute, ich hoffe ich bin in der richtigen Sparte gelandet :)

Ich habe ein Problem mit dem Drucken.
Ich habe ein Pong-Spiel, in dem man eine Bestenliste aufrufen kann. Die Methode hierzu ist in einer Klasse "score" und heißt "ListeAusgeben".
Jetzt möchte ich diese Bestenliste drucken. Im Prinzip ist in der Methode "ListeAusgeben" schon alles parat, was ich brauch um zu drucken.
Wie rufe ich jetzt die Methode auf, um die Bestenliste zu drucken bzw. auf die Druckvorschau zu bekommen?

Hier die Methode in der Klasse"score":
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
public void ListeAusgeben(System.Drawing.Graphics zeichenflaeche, System.Drawing.RectangleF flaeche)
        {
           
            //ein temp Pinsel
            System.Drawing.SolidBrush tempPinsel = new System.Drawing.SolidBrush(System.Drawing.Color.White);
            //Schriftart setzen
            System.Drawing.Font tempSchrift = new System.Drawing.Font("Arial"12, System.Drawing.FontStyle.Bold);
            //für die zentrierte Ausgabe
            System.Drawing.StringFormat ausrichtung = new System.Drawing.StringFormat();
            //Koordianten für die Ausgabe
            float punkteX, nameX, y;
            punkteX = flaeche.Left + 50;
            nameX = flaeche.Left + 250;
            y = flaeche.Top + 50;
            //Ausrichtung zentriert
            ausrichtung.Alignment = System.Drawing.StringAlignment.Center;
            //zeichenfläche löschen
            zeichenflaeche.Clear(System.Drawing.Color.Black);
            //den Titel ausgeben
            zeichenflaeche.DrawString("Bestenliste", tempSchrift, tempPinsel, flaeche.Width/2, y, ausrichtung);
            //und nun die Liste selbst
            for(int i =0;i < anzahl; i++)
            {
                y = y +20;
                zeichenflaeche.DrawString(Convert.ToString(bestenliste[i].LieferePunkte()),tempSchrift,tempPinsel,punkteX,y);
                zeichenflaeche.DrawString(bestenliste[i].LiefereName(),tempSchrift,tempPinsel,nameX,y);
            }
           
        }


und mein Versuch, die Methode in die Druckvorschau (form1) zu bekommen:
ausblenden C#-Quelltext
1:
2:
Score printIns = new Score();
printIns.ListeAusgeben(zeichenflaeche, spielfeldGroesse);


Ich weiß, dass ich das Ganze noch irgendwie "PrintDocument" zuweisen muss, aber wie?
Danke für eure Hilfe :)


Mfg
Muetze
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 30.03.11 15:34 
Hallo,

ja, du mußt ein PrintDocument-Objekt erzeugen und dann das PrintPage-Ereignis abonnieren, s. Beispiel zu msdn.microsoft.com/d...g.printdocument.aspx

Und dann in der PrintPage-Methode einfach deine eigene Methode aufrufen:
ausblenden C#-Quelltext
1:
2:
3:
4:
void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
  ListeAusgeben(e.Graphics, spielfeldGroesse);
}


P.S. Deine grafischen Objekte (GDI Objects), wie z.B. Brush, Pen, Font etc., mußt du wieder per Dispose() freigeben bzw. am besten in eines using-Anweisung packen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
using(SolidBrush brush = new SolidBrush(...))
using(Font font = new Font(...))
{
  // ...
}

Für diesen Beitrag haben gedankt: Muetze187
Muetze187 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 30.03.11 16:13 
Danke für die Antwort!
Im Prinzip musste ich einfach nur die Variable "zeichenflaeche" in
ausblenden C#-Quelltext
1:
printIns.ListeAusgeben(zeichenflaeche, spielfeldGroesse)					


durch "e.Graphics" ersetzen:
ausblenden C#-Quelltext
1:
printIns.ListeAusgeben(e.Graphics, spielfeldGroesse)					


und schon ist alles in ordnung. Danke :)



Mfg
Muetze
m-s
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Mi 30.03.11 19:07 
user profile iconMuetze187 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo Leute, ich hoffe ich bin in der richtigen Sparte gelandet :)

Ich habe ein Problem mit dem Drucken.
Ich habe ein Pong-Spiel, in dem man eine Bestenliste aufrufen kann. Die Methode hierzu ist in einer Klasse "score" und heißt "ListeAusgeben".

Nur mal so am Rande, das kommt mir ja alles sehr bekannt vor :)
Heft 14 würde ich sagen . . .

Gruß Markus
Muetze187 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 30.03.11 20:40 
FALSCH! Heft 16... :)