读书人

关于vb.net2008打印的有关问题这种情

发布时间: 2012-05-01 12:48:58 作者: rapoo

关于vb.net2008打印的问题,这种情况打印多页怎么办?
窗体上有一个打印按钮和一个listview控件,代码如下:

VB.NET code
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 Class


执行打印按钮后效果是这样,都重复打在一张纸上了:


我想分页打印,不知错在哪里,如何才能根据listview1的项内容进行分页打印,请指教。

[解决办法]
VB.NET code
 Dim 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
[解决办法]
VB.NET code
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

读书人网 >VB Dotnet

热点推荐