GDI打印代码问题

whenthat 2015-12-28 03:25:11
我想实现打印dataset里所有表,超出纸张部分换页。

Imports System.Drawing
Imports System.Drawing.Printing
Public Class Print
Private pagePos As Int16 = 0 '当前行数
Private XM_POS As Int16 = 0 '当前项目
Private WithEvents pd As New PrintDocument()
Private T As New DataSet
Private Sub pd_EndPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles pd.EndPrint
pagePos = 0

End Sub
Dim top_namet As Font = New Font("微软雅黑", 24)
Dim top_t As Font = New Font("微软雅黑", 9)
Dim mBrush As New SolidBrush(Color.Black)
Dim T_NAME_Format As New StringFormat

Private Sub pd_Print(ByVal sender As Object, ev As PrintPageEventArgs) Handles pd.PrintPage
Dim ColumnLefts As New ArrayList, ColumnWidths As New ArrayList '数组左与右
Dim TmpLeft, TmpWidth, Tmptop As Int16 '左 宽 标题行高
TmpLeft = 60
Tmptop = 25
Dim ts_lino As Int16 = TmpLeft
For I = 0 To T.Tables(XM_POS).Columns.Count - 1
If I = 1 Then Continue For
TmpWidth = Lw(I)
ColumnLefts.Add(TmpLeft)
ColumnWidths.Add(TmpWidth)
TmpLeft += TmpWidth
Next

TmpLeft = 0
TOPH += 7
T_NAME_Format.LineAlignment = StringAlignment.Center
Dim nn As Byte = 0
For I = 0 To T.Tables(XM_POS).Columns.Count - 1
If I = 1 Then Continue For
ev.Graphics.DrawRectangle(Pens.Black, New Rectangle(ColumnLefts(nn) + TmpLeft, _
TOPH + Tmptop, ColumnWidths(nn), Tmptop * 2))
ev.Graphics.DrawString(T.Tables(XM_POS).Columns(I).ColumnName.ToString, top_t, mBrush, New RectangleF(ColumnLefts(nn) + TmpLeft, _
TOPH + Tmptop, ColumnWidths(nn), Tmptop * 2), T_NAME_Format)
nn += 1
Next

'内容
TOPH += Tmptop * 3
If XM_POS <= T.Tables.Count - 1 Then
Do While pagePos <= T.Tables(XM_POS).Rows.Count - 1 '加入循环
If TOPH < 590 Then
nn = 0
For ii = 0 To T.Tables(XM_POS).Columns.Count - 1
If ii = 1 Then Continue For
ev.Graphics.DrawRectangle(Pens.Black, New Rectangle(ColumnLefts(nn) + TmpLeft, _
TOPH, ColumnWidths(nn), Tmptop))
ev.Graphics.DrawString(T.Tables(XM_POS).Rows(pagePos)(ii).ToString, top_t, mBrush, New RectangleF(ColumnLefts(nn) + TmpLeft, _
TOPH, ColumnWidths(nn), Tmptop), T_NAME_Format) '加入循环
nn += 1
Next
TOPH += Tmptop
pagePos += 1
ev.HasMorePages = False
Else '超出换页
ev.HasMorePages = True
End If
Loop

'项目换页
XM_POS += 1
pagePos = 0
ev.HasMorePages = True
Else
ev.HasMorePages = False
End If
End Sub
End Class


预览时一直卡住,求解决!
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
whenthat 2016-01-03
  • 打赏
  • 举报
回复
不能沉,自己顶~
whenthat 2015-12-30
  • 打赏
  • 举报
回复
引用
调试一下看看卡在哪了
之前打印用打印预览调试,一直卡在第5页无法生成也无法关闭,只有中止调试。 现在代码修改好了,能正常预览。但新的问题又来了 打印预览2次会崩溃,PrintPreviewDialog1.ShowDialog()错误提示“索引超出了数组界限。” 崩溃原因应该是Print生成页数造成的! 第1次预览 生成页数是7页,第2次预览 生成页数是8页,就崩溃! 原因发现了,查了一晚上也无解,求解决!
Justin-Liu 2015-12-30
  • 打赏
  • 举报
回复
调试一下看看卡在哪了
whenthat 2015-12-29
  • 打赏
  • 举报
回复
没人,自己顶~

1,978

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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