最近のトラックバック

無料ブログはココログ

« VB.Net TreeViewコントロールの使い方 (カスタム チェックボックス) | トップページ | EFIシステムでは、GPTディスクのみにWindowsをインストールできます。 »

2015年6月 4日 (木)

VB.NetでVB6のNewPageのような改ページ処理をする

VB.Netの標準的な印刷処理では、複数ページの印刷は1ページごとにPrintPageプロシジャを抜けなけばならない仕様になっている。しかしこれは、印刷出力の内容が多様な場合にはプログラムの制御が複雑化し、著しくプログラム作成の手間を増やすことになる。

ここでは、通常のPrintDocument コントロールを使った印刷で、VB6の Printer.NewPage メソッドのように、PrintPageプロシジャを抜けださずに印刷処理プログラムの途中で改ページを行う方法を紹介する。

WindowsAPIを使った処理では、プリンタの改ページを行うには、EndDoc関数でページを終了し、StartDoc関数で新しいページを開始することで可能となる。

次の文書によると、
http://ascii.asciimw.jp/pb/msdn/article/a35_0056.html
PrintDocument コントロールには PrintControlerクラスが包含され、その中の OnEndDoc と OnStartDoc メソッドを呼び出すことで、前記APIの処理が行えるらしい。

以上をプログラム化したのが次である。

    '印刷ボタンをクリックしたときの処理
    Private Sub Button1_Click(sender As Object, e As EventArgs) _
            Handles Button1.Click
        If PrintDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
            PrintDocument1.PrinterSettings = PrintDialog1.PrinterSettings
            PrintDocument1.Print()
        End If
    End Sub
    '印刷イベントハンドラ(印刷処理の本体)
    Private Sub PrintDocument1_PrintPage(sender As Object, _
            e As Printing.PrintPageEventArgs) _
            Handles PrintDocument1.PrintPage
        Dim Fnt As Font = New Font("MS 明朝", 10.5, FontStyle.Bold)
        Dim iPage As Integer
        Dim Grp As System.Drawing.Graphics = e.Graphics
       '3ページ印刷する
        For iPage = 1 To 3
            '印刷内容
            Grp.DrawString("Page " & iPage, Fnt, Brushes.Black, 100, 100)
            '改ページ処理開始
           '最後のページは改ページすると空白のページができるので改ページしない
            If iPage < 3 Then
                'ページの終了
                PrintDocument1.PrintController.OnEndPage(PrintDocument1, e)
                '新しいページのスタート。Grpは新しいページのグラフィックに更新する
                Grp = PrintDocument1.PrintController.OnStartPage(PrintDocument1, e)
            End If
        Next iPage
        Fnt.Dispose()
        e.HasMorePages = False
    End Sub

通常のPrintPageプロシジャを抜けて改ページする方法に比べ、格段にプログラムがすっきりと見やすくなっている。

« VB.Net TreeViewコントロールの使い方 (カスタム チェックボックス) | トップページ | EFIシステムでは、GPTディスクのみにWindowsをインストールできます。 »

VB.Net」カテゴリの記事

コメント

ありがとう

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: VB.NetでVB6のNewPageのような改ページ処理をする:

« VB.Net TreeViewコントロールの使い方 (カスタム チェックボックス) | トップページ | EFIシステムでは、GPTディスクのみにWindowsをインストールできます。 »