我有一个可滚动的表单,我想完全打印。
我已尝试使用此代码进行打印:
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
Me.PrintForm.PrintAction = Printing.PrintAction.PrintToPreview
Me.PrintForm.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)
End Sub
结果并不准确。
为了证明我的问题,这里有一些照片:
这是我想要的结果(当然我希望它也可以打印所有可滚动的内容)
正如您所看到的,此图像包含图像所需的所有宽度,但由于它是一个打印屏幕图像,因此它不包含我希望在我的可打印版本中具有的可滚动区域表格。
这是我从我的代码中得到的:
正如你在这里看到的那样,我只获得了大约60%的表格宽度和50%的高度,显然,我没有得到可滚动的区域。
我并不真正关心我想要打印整个表格的质量,包括可滚动区域。
答案 0 :(得分:2)
在这一行:
PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)
如果你有一个可滚动的表单,看起来PrintOption.Scrollable
只会起作用。您在表单中有一个可滚动的控件(可能是Panel
)。在这种情况下,其区域不会扩展到打印机上。比较:
可滚动控制:
打印为:
可滚动的表单:
打印为:
根据this official answer from Microsoft,使用PrintForm
无法捕获可滚动控件。如果使用PrintDocument and some custom coding,则可以针对简单情况(例如可滚动的TextBox)执行此操作。在您的情况下,您可能需要更多自定义编码。处理PrintDocument1.PrintPage
看起来是最好的起点,如果您愿意的话。
答案 1 :(得分:1)
根据您展示的内容......看起来可滚动区域就像Panel一样容器。如果是这种情况,打印表单不是问题,它打印可滚动控件。
看看这个项目从控件创建一个位图: http://www.codeproject.com/Articles/35734/Print-a-WinForms-User-Control
编辑: 第二个想法,我不认为该链接的代码也解决了实际的滚动问题。
我认为你需要做两件事之一: 1)暂时调整面板的大小,使滚动条消失,然后将其调整大小 2)构建一个控件(也许是一个“可打印的版本”表单),它没有嵌套的可滚动元素,并优雅地处理像分页这样的东西。
选项#2可能听起来很多工作,但我认为您可以很快做一些事情:创建一个新面板,克隆您想要打印的每个控件并将其添加到面板(根据需要调整大小以避免滚动) ,打印面板,然后处理面板。
答案 2 :(得分:1)
我认为你的回答是the article 您所需要的只是引用FormPrinting库(或将源代码导入您的解决方案)。
Private Sub btnPrint_Click(object sender, EventArgs e)
{
var fp = new FormPrinting.FormPrinting(this);
fp.Print();
}
将完成打印工作 我测试了这个库,对图像和......等可滚动内容没有任何问题。
答案 3 :(得分:0)
检查MSDN论坛的代码here 像这样的代码
在“工具箱”中,单击“Visual Basic PowerPacks”选项卡,然后将PrintForm组件拖到表单上。
PrintForm组件将添加到组件托盘中。
在“属性”窗口中,将PrintAction属性设置为PrintToPrinter。
在适当的事件处理程序中添加以下代码(例如,在打印按钮的Click事件处理程序中)。
PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)
和here 得到了和你一样的答案。
答案 4 :(得分:0)
我有一个类似的问题,我能够解决没有任何额外的库或扩展。大多数Forms控件都可以使用DrawToBitmap方法。
private void tbRegPersPlacÅrArb_TextChanged(object sender, EventArgs e)
{
Compare();
}
private void Kvarattfördela_TextChanged(object sender, EventArgs e)
{
Compare();
}