2009-03-11 19 views
3

私は、依頼部品用のデータベースアプリケーションを作成しました。ドットネットのWindowsフォームを簡単に印刷する方法はありますか?

これはリクエスタのためのものと、スーパーバイザー承認のためのものと、購入承認のためのものと、何を注文するかを知るために使用する書類とを含む。

今私はペーパーレスの大ファンですが、私の雇用者は本当に彼らの論文が好きです。 Windowsフォームを紙に複製するWYSIWYGの簡単な方法はありますか?

私も、私は2.0の.NET Frameworkを使用するように制限していますことを

おかげ

答えて

2

を追加する必要がありますここであなたがやりたいだろうcode sample from MSDNです:

[System.Runtime.InteropServices.DllImport("gdi32.dll")] 
public static extern long BitBlt (IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop); 
private Bitmap memoryImage; 
private void CaptureScreen() 
{ 
    Graphics mygraphics = this.CreateGraphics(); 
    Size s = this.Size; 
    memoryImage = new Bitmap(s.Width, s.Height, mygraphics); 
    Graphics memoryGraphics = Graphics.FromImage(memoryImage); 
    IntPtr dc1 = mygraphics.GetHdc(); 
    IntPtr dc2 = memoryGraphics.GetHdc(); 
    BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376); 
    mygraphics.ReleaseHdc(dc1); 
    memoryGraphics.ReleaseHdc(dc2); 
} 
private void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 
    e.Graphics.DrawImage(memoryImage, 0, 0); 
} 
private void printButton_Click(System.Object sender, System.EventArgs e) 
{ 
    CaptureScreen(); 
    printDocument1.Print(); 
} 

いくつかの注意点があります - ここで例外をチェックすることはありません。さらに、管理されていないBitBlt APIを使用するためには完全な信頼関係で実行する必要がありますが、これは画面に表示されている限りWindows Formsフォームを印刷する最も簡単な方法です。

4

これは簡単な方法です。

public static class FormExtensions 
    { 
     public static void PrintForm(this Form f) 
     { 
      PrintDocument doc = new PrintDocument(); 
      doc.PrintPage += (o, e) => 
      { 
       Bitmap image = new Bitmap(f.ClientRectangle.Width, f.ClientRectangle.Height); 
       f.DrawToBitmap(image, f.ClientRectangle); 

       e.Graphics.DrawImage(image, e.PageBounds); 
      }; 

      doc.Print(); 
     } 
    } 

これにより、フォームをページのサイズに伸ばします。 rhe DrawImageメソッド呼び出しの2番目のパラメータを微調整して、必要に応じて他の場所に描画することができます。

関連する問題