タイトル | : Re^3: 改ページしても1枚の紙に印刷されてしまいます。 |
記事No | : 1916 |
投稿日 | : 2005/07/20(Wed) 15:48 |
投稿者 | : 花ちゃん |
> 例の実行結果を教えてください。もう一度考えてみます。
サンプルがあるのですから、ご自分で色々設定を変えて見て試して頂いたら、ご理解できるかと 思うのですが、e.HasMorePages は、VB6.0 の改ページ動作とは違います(ヘルプ参照) 従ってPrintDocument1_PrintPage イベントに送るデータは1ページ分づつになり PrintDocument1_PrintPage イベントを抜けた時に改ページが行れます。その時に e.HasMorePages =True に設定するともう一度PrintDocument1_PrintPage イベント を呼び出し 残りの文書を印刷できるようになるのです。 下記を一度試して見て下さい。
Private prpg As Integer '印字ページのフラグ Private count As Integer '印字済み行数 Private pgMax As Integer = 45 '印字する総行数 Private pagno As Integer '印字ページの番号 Private kara As Integer Private myText(45) As String
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer '実際はテキストファイルを行毎に配列に入れて下さい。 For i = 0 To 45 myText(i) = i & " 印刷する文書の1行分のデータ" Next
PrintDocument1.Print()
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, _ ByVal e As System.Drawing.Printing.PrintPageEventArgs) _ Handles PrintDocument1.PrintPage
Dim i As Integer Dim g As Graphics = e.Graphics Dim ln As Integer = 0
'ミリメートルを長さの単位に指定します。 g.PageUnit = GraphicsUnit.Millimeter Select Case prpg Case 0 '1ページ分のデータを印字
For i = kara To kara + 9 ln += 1 g.DrawString(myText(i), _ New Font("MS Pゴシック", 12), Brushes.Black, 20, ln * 25) count += 1 Next i e.HasMorePages = True Case 1 '残りの行数を印字 e.HasMorePages = False
For i = kara To pgMax ln += 1 g.DrawString(myText(i), _ New Font("MS Pゴシック", 12), Brushes.Black, 20, ln * 25) Next i '追加分ここから '印刷プレビューでもこのイベントは呼び出されるので初期化が必要 kara = 0 prpg = 0 count = 0 Exit Sub '追加分ここまで End Select If ((pgMax - count) / 10) > 1 Then kara = i prpg = 0 '次のページを印字 Else kara = i prpg = 1 '最後のページを印字 End If End Sub
|