私の状況は次のとおりです。まず、すべての印刷コードがモジュールに格納されており、印刷ボタンをクリックすると呼び出されます。私の問題は、ドキュメントを初めて印刷するときにページが正常に印刷されることですが、もう一度 [印刷] をクリックすると、ページが重ねて印刷され始めます。デバッグすると、e.hasmorepages は false に設定されますが、ループして print_page イベントを数回実行します... hasmorepages が間違いなく false に設定されているにもかかわらず、なぜ何度もループするのか混乱しています?? 通常、最初は正しく印刷されますが、2 回目に印刷をクリックすると印刷されないという事実は、何かを処分する必要があると考えさせます。各印刷の前にページ番号変数が1に設定されていることはわかっているので、そうではありません。私が使用しているコードは、独自のモジュールに移動するまで機能していました。
注: [印刷] をクリックすると、配信レシートが必要かどうかを選択します。いいえの場合、ストア コピーとカスタマー コピーが印刷されます。はいの場合、店舗、顧客、および配送のコピーが印刷されます。通常、店舗コピーと顧客コピーは重ねて印刷されますが、配送コピーは正しいため、3 ページではなく 2 ページが印刷されます。
私のモジュールの基本的な概要は次のとおりです。
Imports System.Drawing
Imports System.Drawing.Printing
Module Receipt2
Public copy As Integer
Dim row As Integer
Dim ItemsRowCount As Integer = Invoice.dgvInvoiceItems.RowCount
Private Doc As New PrintDocument()
Public Sub printInvoice()
Try
copy = 1
AddHandler Doc.PrintPage, AddressOf Print_PrintPage
Doc.Print()
row = 0
Doc.Dispose()
copy = 1
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub Print_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Try
'RECEIPT ITEMS PRINTED HERE
'print Store/customer copy and sig line
If copy = 1 Then
g.DrawString("Store Copy", New Font("Verdana", 15, FontStyle.Italic), Brushes.DarkRed, 50, 1045)
e.HasMorePages = True
copy = copy + 1
row = 0
Exit Sub
ElseIf copy = 2 Then
g.DrawString("Customer Copy", New Font("Verdana", 15, FontStyle.Italic), Brushes.DarkRed, 50, 1045)
If Invoice.boolDeliveryReceipt = True Then
e.HasMorePages = True
copy = copy + 1
row = 0
Exit Sub
End If
ElseIf copy = 3 Then
g.DrawString("Delivery Copy", New Font("Verdana", 15, FontStyle.Italic), Brushes.DarkRed, 50, 1045)
End If
'e.HasMorePages = False
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
End Module
これを見てくれてありがとう!私は問題を追跡するのに何時間も費やしましたが、運がありませんでした。