Entwickler-Ecke

WinForms - Drucken von Text aus verschiedenen Elementen


Tobias L - Sa 13.01.07 23:14
Titel: Drucken von Text aus verschiedenen Elementen
Hey.

Ich hab schon einiges in C# programmiert, aber jetzt weiß ich einfach nich mehr weiter.

Ich hab in meiner Form verschiedene Elemente wo Text reingeschrieben weden kann, eine Textbox, ein ListViewElement und ein RichTextBox Element. Der Text soll dann zusammenhängend gedruckt werden.

Meine Frage: Wie bekomm ich ein Druckbefehl raus? Das Dialogfeld mit den Druckereinstellung konnte ich schon öffnen, mit dem Befehl printDialog.ShowDialog(); aber wenn ich dann auf Drucken geklickt hab, passierte gar nichts.

Kann mir da jemand Helfen?
Danke schon im voraus.

Tobias


Christian S. - Sa 13.01.07 23:21

Hallo!

Drucken tust Du mit dem PrintDocument. Das startest Du, indem Du die Print-Methode des PrintDocumentsaufrufst.

Die eigentliche Ausgabe erledigst Du im PrintPage-Event des PrintDocuments: Das hat einen PrintPageEventArgs-Parameter (Name wie immer "e"), der ein entsprechendes Graphics-Objekt hat, auf welches Du zeichnen kannst. Wichtig: Sollen weitere Seiten gedruckt werden, musst Du e.HasMorePages auf true setzen.

Grüße
Christian


Tobias L - So 14.01.07 20:24

Ich hab das PrintPage-Event folgender Maßen in meinem Quellcode:


C#-Quelltext
1:
2:
3:
4:
private void prtRezept_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            
        }


Da kommt ja bestimmt das Graphics-Objekt rein, aber wie kann ich nun die drei string-Variablen rein bekommen? So wie ich das verstanden hab, muss ich jetzt das Graphics-Objekt aufrufen und dann bestimmen, was gedruckt werden soll (in meinem Fall die Zeichenketten aus den drei Elementen). Jetzt weiß ich aber nicht wie ich das bestimmen soll?

Kannst du mir da noch mal helfen?

Tobias


Christian S. - So 14.01.07 20:34

Hallo!

Die Zeichenketten wirst Du irgendwo so ablegen müssen, dass Du auf sie von dem Event aus zugreifen kannst (also als privates Feld oder so).

Eine solche Zeichenkette ausgeben kannst Du dann in dem Event mit e.Graphics.DrawString(aText, aPrintFont, Brushes.Black, xPos, yPos, new StringFormat());

Grüße
Christian


Tobias L - So 14.01.07 23:07

Erstmal Vielen Dank für die letzte Antwort, hat mir sehr geholfen. Ich bin nämlich noch anfänger. Jetzt komm ich aber trotzdem nicht weiter bei der Schrift. Ich hab zuerstmal folgenden Code geschrieben:


C#-Quelltext
1:
2:
3:
4:
private void prtRezept_PrintPage_1(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawString(html_var.titel, FontFamily.GetFamilies(FontStyle.Bold), Brushes.Black, 3040new StringFormat()); 
        }


Ich hoffe ich hab das bis hierhin erstmal richtig gemacht. Jetzt komm ich aber da nicht weiter, wo ich erstmal FontFamily.GetFamilies(FontStyle.Bold) hingeschrieben hab. Was hab ich da verkehrt gemacht?

Übrigens die Werte nach der Schriftfarbe (bei mir 30 und 40) geben doch bestimmt die Anfangsposition auf dem gedruckten Blatt in Pixel an, richtig?

Grüße
Tobias


Christian S. - So 14.01.07 23:16

Hallo!

aPrintFont ist vom Typ Font. Eine Instanz davon erstellst Du z.B. so:

C#-Quelltext
1:
aPrintFont := new Font("Arial"10);                    


Du solltest Dir angewöhnen, bei Unklarheiten zuerst einmal die Doku zur entsprechenden Klasse / Methode anzusehen, die ist meist sehr gut! :-) Damit kannst Du Dir auch die Frage beantworten, was die Zahlen bedeuten :zwinker:

Grüße
Christian


JüTho - Mo 15.01.07 10:56

Hallo,

falls Du in erster Linie an einem ScreenShot interessiert bist, kann ich Dich auf meine Klasse FormPrint [http://www.mycsharp.de/wbb2/thread.php?threadid=29704] hinweisen.

Gruß Jürgen