PrintDocument打印分页的问题

sz_lgp 2006-04-24 04:00:35
我的问题是怎样实现PrintDocument的分页打印?

以下一部分代码:(PrintDocument挂钩的事件是A4纸的20张长度,可以打印,但不能指定从M页到N页打印,化了好几天了都没有搞定,请教各位了。



Private PrintDataGrid As PrintDocument

Private PrintPriview As PrintPreviewDialog

Private PageSetup As PageSetupDialog



Public Sub Print()
Try

PrintDataGrid = New System.Drawing.Printing.PrintDocument

AddHandler PrintDataGrid.PrintPage, AddressOf Me.PrintDataGrid_PrintPage

PageSetup = New PageSetupDialog

PageSetup.PageSettings = PrintDataGrid.DefaultPageSettings


If PageSetup.ShowDialog() = DialogResult.Cancel Then
Exit Sub
End If


If PrintDataGrid.DefaultPageSettings.PaperSize.PaperName.ToString = "custom" Then
' PrintDataGrid.DefaultPageSettings.PaperSize.Kind = System.Drawing.Printing.PaperKind.A4
End If

allpages = 1

PageNumber = 1

index_Rows = 0


PrintDataGrid.DefaultPageSettings.PrinterSettings.FromPage = frompage//全局变量

PrintDataGrid.DefaultPageSettings.PrinterSettings.ToPage = topage//全局变量



Dim printerset As PrintDialog = New PrintDialog

printerset.Document = PrintDataGrid

printerset.ShowNetwork = True

printerset.AllowSelection = True

printerset.AllowSomePages = True

printerset.ShowDialog()


PrintPriview = New PrintPreviewDialog

PrintPriview.AutoScroll = True

PrintPriview.ControlBox = True

PrintPriview.AllowDrop = True

PrintPriview.FormBorderStyle = FormBorderStyle.SizableToolWindow

PrintPriview.Document = PrintDataGrid

PrintPriview.Size = New Size(600, 600)

PrintPriview.StartPosition = FormStartPosition.CenterScreen

PrintPriview.SetAutoScrollMargin(5, 5)

PrintPriview.ShowDialog()


Catch ex As Exception
MessageBox.Show("error:" & ex.ToString)
Finally

End Try
End Sub


Private Sub PrintDataGrid_PrintPage(ByVal sender As Object, ByVal ev_p As System.Drawing.Printing.PrintPageEventArgs)
On Error Resume Next

Dim DrawBrush As New SolidBrush(正文颜色)

Dim row_count As Integer '当前要打印的行

Dim myrow As DataRow

Dim 列宽(DataGridTable.Columns.Count - 1) As Single

Dim 列高(DataGridTable.Columns.Count - 1) As Single

ev = ev_p.Graphics

Dim x_unit_all As Single

Dim 最多行数 As Single

Dim mypoint As PointF

Dim 数据行数 As Integer = 0

.....................
end sub
...全文
671 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sz_lgp 2006-04-26
  • 打赏
  • 举报
回复
版主在哪里?
xjtandqt 2006-04-25
  • 打赏
  • 举报
回复
要得到总页数必须先进行一次计算,算完页后再重新开始预览或打印
sz_lgp 2006-04-25
  • 打赏
  • 举报
回复
xjtandqt说的我也做了,是个可行的办法,就是太不好,原因是要打印500以上页时,只好要花很长的时间,客户会抱怨的。
不务正 2006-04-24
  • 打赏
  • 举报
回复
这方面 flygoldfish(长江支流) 历害着呢!
sz_lgp 2006-04-24
  • 打赏
  • 举报
回复
copico的地址内容没有新颖,没有解决我的问题,flygoldfish说的是实际情况,我也做了M-N的判断,可总是要打印第一页(白的,没内容)M-N之间有内容,可是和全部打印后同页码的内容有些不一样,不知为什么?
copico 2006-04-24
  • 打赏
  • 举报
回复
http://blog.csdn.net/flygoldfish/archive/2004/09/06/95685.aspx
sz_lgp 2006-04-24
  • 打赏
  • 举报
回复
这个办法我做了,如果在m-n之间打印,不在之间我只计位置,可怎搞也没有搞定,关健是总页数也没法在打印之前得到。
长江支流 2006-04-24
  • 打赏
  • 举报
回复
如果不指定,是打印全部页,如果指定,也会打印全部页

实际你应在打印中判断当前页索引是否在m...n之间,是就打印啊

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧