tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
複数ページに渡ってテキストを印刷する(VB.NET) ( No.0 )  [親スレッドへ]
日時: 2007/09/16 18:47
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[印刷関係][][]                                                      *
* キーワード:改ページ処理,,,,,                                                   *
***********************************************************************************

元質問:改ページしても1枚の紙に印刷されて.. - 浦島太郎  2005/07/20-11:05 No.1910

テキストファイルを開いて印刷をしようとしていますが、改ページができません
行間隔を7oとって、20行で改ページのつもりなんですが、1枚の紙に2度打
ちされるばかりです。

-----------------------------------------------------------------------------------
Re^3: 改ページしても1枚の紙に印刷.. - 花ちゃん  2005/07/20-15:48 No.1916
-----------------------------------------------------------------------------------
> 例の実行結果を教えてください。もう一度考えてみます。

サンプルがあるのですから、ご自分で色々設定を変えて見て試して頂いたら、ご理解できるかと
思うのですが、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

-----------------------------------------------------------------------------
投稿時間:2005/07/21(Thu) 10:31
投稿者名:花ちゃん

念の為、印刷プレビュー等を表示する場合、再度 PrintDocument3_PrintPage イベントが
呼ばれますので使用したカウント用変数は、PrintDocument3_PrintPage イベント内の最後に
印刷した後でクリアしておいて下さい、でないとプレビューしてから印刷すると印刷物が
ないので印刷されません。
(どちらのサンプル(下記の魔界の仮面弁士さんの投稿コードも)でも必要です)



 [スレッド一覧へ] [親スレッドへ]