关于vb.net2008打印的问题,这种情况打印多页怎么办?
窗体上有一个打印按钮和一个listview控件,代码如下:
Public Class Form1 '执行打印按钮 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListView1.View = View.Details ListView1.Columns.Add("第一列") Dim views As New ListViewItem For i As Integer = 0 To 200 views.Text = i ListView1.Items.Add(views) views = New ListViewItem Next PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim font1 As New Font("华文中宋", 20) font1 = New Font("黑体", 10) e.Graphics.DrawString(ListView1.Columns(0).Text, font1, Brushes.Black, 20, 70) Dim rowjl = 85 For i As Integer = 0 To ListView1.Items.Count - 1 e.Graphics.DrawString(ListView1.Items(i).SubItems(0).Text, font1, Brushes.Black, 90, rowjl) e.Graphics.DrawLine(Pens.Black, 20, rowjl + 13, 620, rowjl + 13) If rowjl > 1100 Then e.HasMorePages = True rowjl = 85 Else e.HasMorePages = False rowjl = rowjl + 15 End If Next End SubEnd ClassDim i As Integer = 1 '当前页码,就是说你要在绘制到哪一页' Dim TotalPageForPrint As Integer '总页数 Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage PreviewPrt(e.Graphics, i) '绘制过程 i += 1 If i <= TotalPageForPrint Then e.HasMorePages = True Else e.HasMorePages = False i = 1 End If End Sub
[解决办法]
Public Class Form1 '执行打印按钮 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListView1.View = View.Details ListView1.Columns.Add("第一列") Dim views As New ListViewItem For i As Integer = 0 To 200 views.Text = i ListView1.Items.Add(views) views = New ListViewItem Next '假设每页打印40行 total = System.Math.Floor(201 / 40) PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub Sub print(ByVal g As Graphics, ByVal p As Integer) Dim font1 As New Font("黑体", 10) For i As Integer = 0 To 40 - 1 If p * 40 + i < 201 Then g.DrawString(ListView1.Items(i + p * 40).SubItems(0).Text, font1, Brushes.Black, 80, i * 20 + 80) g.DrawLine(Pens.Black, 80, i * 20 + 100, 400, i * 20 + 100) End If Next End Sub Dim i As Integer = 0 Dim total As Integer Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage print(e.Graphics, i) i += 1 If i <= total Then e.HasMorePages = True Else e.HasMorePages = False i = 0 End If End SubEnd Class
[解决办法]
If rowjl > 1100 Then
e.HasMorePages = True
rowjl = 85
exit sub '加这句
Else
e.HasMorePages = False
rowjl = rowjl + 15
End If