tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: 改ページしても1枚の紙に印刷されてしまいます。
投稿日: 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。