2010-11-19 4 views
0

Ich arbeite chequePrinting-Projekt mit Windows-Formular, wo eine meiner Anforderung ist, Scheckempfangsgutschein zu drucken, indem Sie auf Drucken Schaltfläche, aber es gibt mir den Ausdruck der gesamten Fensterform statt nur weißen Teil des folgenden Bildes geben .Wie drucke ich nur tabellayoutoutpanel und label von windows form?

alt text

Der Code, die ich für die Druckvorschau-Ereignishandler verwenden ist:

Graphics myGraphics = this.CreateGraphics(); 
     Size s = this.Size; 
     memoryImage = new Bitmap(s.Width, s.Height, myGraphics);// 
     Graphics memoryGraphics = Graphics.FromImage(memoryImage); 
     memoryGraphics.CopyFromScreen(label9.Location.X, label9.Location.Y, 52, 9, s); 
     printPreviewDialog1.Document = PrintDoc1; 
     PrintDoc1.PrintPage += printDocument2_PrintPage; 
     printPreviewDialog1.ShowDialog() 

Könnte jemand bitte sagen, wie kann ich mein Problem lösen?

+0

Ich nehme aus dem Titel, dass der weiße Teil ein 'TableLayoutPanel' ist, und das einzige, was Sie drucken möchten, ist das, richtig? –

+0

Ja, Sie haben Recht. Kannst du mir bitte sagen, wie ich das machen kann? – Dusk

Antwort

2

Es ist schwer, ohne den Rest des Codes sicher zu sagen, aber es sieht aus wie der Code, den Sie gepostet ein Bild des Formulars selbst erstellen, anstatt die TableLayoutPanel, die Sie drucken möchten. Wenn Sie this keyword verwenden, bezieht sich das auf die aktuelle Instanz der Klasse, die Ihren Code enthält. Vermutlich ist dies Ihre Form, die nicht das ist, was Sie drucken möchten (aber erklärt, warum es die ganze Sache zeigt).

Stattdessen können Sie einfach ein Bild des TableLayoutPanel erstellen (DrawToBitmap method) und das ausdrucken. Sie müssen kein Graphics Objekt erstellen oder die genauen Koordinaten des Bildschirmstandorts angeben, den Sie kopieren möchten. Zum Beispiel:

//Create a temporary image to draw into 
//with the dimensions of your TableLayoutPanel 
using (Bitmap printImage = new Bitmap(myTableLayoutPanel.Width, myTableLayoutPanel.Height)) 
    { 
     //Draw the TableLayoutPanel control to the temporary bitmap image 
     myTableLayoutPanel.DrawToBitmap(printImage, new Rectangle(0, 0, printImage.Width, printImage.Height)); 

     //(...your code continues here, except that now you 
     // will print the temporary image you just created) 
     printPreviewDialog1.Document = PrintDoc1; 
     PrintDoc1.PrintPage += printDocument2_PrintPage; 
     printPreviewDialog1.ShowDialog() 
    } 

ich nicht aus dem Code kann sagen, dass Sie auf dem Laufenden, wie genau bist du das Bild vorbei, die auf Ihren Druckvorschau-Dialog gedruckt werden soll, dafür aber du hast arbeiten sie mit memoryImage vor solltest Arbeiten Sie mit dem neuen printImage im obigen Beispielcode.

Beachten Sie, dass die DrawToBitmap Methode wird kein Kind TextBox Kontrolle ziehen, wenn seine Visible Eigenschaft auf False gesetzt ist, und dass Ihre Kontrollen werden in umgekehrter Reihenfolge gezogen werden. Sie müssen sicherstellen, dass das Aussehen für Ihre Anwendung akzeptabel ist, aber in den meisten Fällen ist dies der einfachste Weg.

+0

Nun, Danke, Cody! Es funktioniert. – Dusk