2010-11-19 4 views
0

私はchequePrintingプロジェクトをWindowsフォームを使って作業しています。私の要件の1つは、印刷ボタンをクリックして受取票を印刷することですが、次の画像の白い部分のみを表示するのではなく、 。Windowsレイアウトのtablelayoutpanelとラベルだけを印刷するには?

alt text

私は印刷プレビューイベントハンドラのために使用しているコードは、次のとおりです。

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() 

誰もが、私は私の問題を解決する方法を教えていただけますか?

+0

私はタイトルから、白い部分が 'TableLayoutPanel'であると仮定します。あなたが印刷したいのはそれだけです。 –

+0

はい、あなたは正しいです。どうすればいいですか教えてください。 – Dusk

答えて

2

残りのコードがなければ、わかりにくいですが、投稿したコードは、印刷するTableLayoutPanelではなく、フォーム自体のイメージを作成しているようです。 this keywordを使用すると、コードを含むクラスの現在のインスタンスを参照します。おそらく、これはあなたの印刷するものではない(しかし、なぜそれがすべてのものを表示しているのかを説明する)あなたのFormです。

代わりにTableLayoutPanelDrawToBitmap methodを使用)のイメージを作成して印刷することができます。 Graphicsオブジェクトを作成する必要はなく、コピーしたい画面の場所の正確な座標を指定する必要はありません。たとえば:

//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() 
    } 

私はあなたがあなたの印刷プレビューダイアログに印刷する画像を渡しているが、しかし、あなたはそれが必要前にmemoryImageで作業してしまった方法を正確に掲示コードから言うことができません上記のサンプルコードで新しいprintImageを使用してください。そのVisibleプロパティは、あなたのコントロールは逆の順序で描画されることを、Falseに設定されている場合DrawToBitmap方法は子供TextBoxコントロールを描画しません

注意。外見がアプリケーションで受け入れられるかどうかを確認する必要がありますが、これは最も簡単な方法です。

+0

まあ、ありがとう、コーディー!それは働いている。 – Dusk

関連する問題