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

タイトル Re^3: VB.NETの印刷の改ページ処理
投稿日: 2006/03/14(Tue) 15:00
投稿者魔界の仮面弁士
すみません。悩んでいる部分がよく分からなかったので……印刷処理の概要から書きます。


まず、ページの印刷が必要になるたびに、PrintDocument の PrintPageイベントが呼ばれます。

このイベントの第2引数から得られる e.Graphics が、描画のためのキャンパスです。
(VB6 でいう所の、Printer や PictureBox に相当しますね)

そしてこの第2引数に、「e.HasMorePages = True」と指定した状態でイベントを抜けると、
続けて次のページの印刷処理が発生し、再度 PrintPageイベントが呼び出されます。
以降、HasMorePages に False が指定されるまで、PrintPage イベントが発生しますので、
これが改ページ処理という事になります。


> 具体的にコーディングして教えていただけないでしょうか?
「明細印刷」の中で使われているデータの扱いなどが不明瞭なので、
具体的なコードを書くのは難しいです…。特に決まった書き方があるでも無し。


とりあえずコードのイメージで書くと、たとえば 3 ページ固定で印刷するなら、

 Private ページ番号 As Integer = 0
 Private Sub PrintDocument1_PrintPage(……
  ページ番号 += 1
  タイトル印刷(e.Graphics)
  明細印刷(e.Graphics, ページ番号)
  If ページ番号 = 3 Then
   e.HasMorePage = False  '3ページ印刷したら終了
   ページ番号 = 0
  Else
   e.HasMorePage = True
  End If
 End Sub

のようなイメージで書けるかな、と思います。


あるいは、PrintDocument クラス自体を継承させて

 NotInheritable Class 月次売上帳票
  Inherits Printing.PrintDocument
   :
  Private ページ番号 As Integer = 0
  Private 月次売上 As 営業売上
  Protected Overrides Sub OnPrintPage(ByVal e As Printing.PrintPageEventArgs)
   ページ番号 += 1
   タイトル印刷(e.Graphics)
   e.HasMorePages = 明細印刷(e.Graphics)
   MyBase.OnPrintPage(e)
  End Sub
  Private Sub タイトル印刷(ByVal G As Graphics)
   :
  End Sub
  Private Function 明細印刷(ByVal G As Graphics) As Boolean
   :
   'ページ内に印刷し切れなかったデータがあれば、True
   '全データを印刷し終わったら False を返す
   :
  End Sub
 End Class

のようにするとか。

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

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