我正在使用windows-form工作chequePrinting项目,其中一个要求是通过单击打印按钮打印Check Receiving凭证,但是它给了我整个窗口形式的打印,而不是仅提供以下的白色部分图片。
我用于打印预览事件处理程序的代码是:
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 :(得分:2)
如果没有剩下的代码,很难确定,但看起来您发布的代码是创建表单本身的图像,而不是您要打印的TableLayoutPanel
。当您使用this
keyword时,它引用包含您的代码的类的当前实例;大概这是你的Form
,这不是你想要打印的(但解释了为什么它显示了整个事物)。
相反,您只需创建TableLayoutPanel
的图像(使用其DrawToBitmap
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
。
请注意,如果DrawToBitmap
属性设置为TextBox
,则Visible
方法不会绘制子False
控件,并且您的控件将以相反的顺序绘制。您必须确保它的外观对于您的应用程序是可接受的,但通常情况下,这是最简单的方法。