我刚创建了一个请求部件的数据库应用程序。
它有几种形式,一种用于请求者,一种用于主管批准,一种用于购买批准,一种用于职员用于知道要订购什么。
现在我是无纸化的忠实粉丝,但我的雇主真的很喜欢他们的论文。 是否有一种简单的方式让WYSIWYG将我的Windows表单复制到纸上?
我还应该补充一点,我只能使用2.0 .Net框架
谢谢
答案 0 :(得分: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();
}
}
这会将表单拉伸到页面大小。你可以调整一下drawImage方法调用的第二个参数,以便在其他地方绘制它。
答案 1 :(得分: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窗体表单的最简单方法,因为它显示在屏幕上。