複数ページの印刷

タグの編集
投稿者 なべ  () 投稿日時 2008/2/23 23:50:00
当方、VB2005で勉強中の者です。 
テキストファイルを読み込み、 
必要なデータをリストボックスに表示して 
印刷しようとしています。 
印刷を実行したら1ページ目のみ印刷されました。 
これは「HasMorePages」で回避する事が出来ると思ったのですが今度は必要なページで停める事が出来ません。 
「Listbox.Items.Count」でリストボックスの要素数を取り出して 
印刷するページ数は計算できるのですがうまく動作しません。 
「HasMorePages=true」を最終ページ印刷時に「False」にする方法・ 
Tips・サンプルなどご教授頂きたいと思います。 
宜しくお願いいたします。
投稿者 なべ  () 投稿日時 2008/2/24 01:15:00
追加カキコです。 
MSDNの検索で複数ページを検索したところ、 
http://msdn2.microsoft.com/ja-jp/library/cwbe712d(printer).aspx 
上記HPのサンプルコードの中に 
e.HasMorePages = stringToPrint.Length > 0 
というコードがありました。 
これはファイルを最後まで読み込んだ上で 
その文字列の文字数をLengthで出しているようですが、 
「> 0」の意味というか使い方がわかりません。 
こちらについても判る方がいらっしゃいましたらご教授、宜しくお願いいたします。
投稿者 nagasaqa  () 投稿日時 2008/2/24 05:18:00
>>1 
e.HasMorePages = (stringToPrint.Length > 0 ) 
 
ひょっとして、e.HasMorePages の型は、Boolean じゃないですか?MSDNライブラリに、以下がありましたので 
  ev.HasMorePages = False  
boolern ですね。 
=の右辺(まだ印字されない文字が残っている)が、True、か False かを左辺に入力しているのですね。
投稿者 なべ  () 投稿日時 2008/2/24 20:25:00
>>2 
nagasaqaさん、早速のコメントありがとうございます。 
なるほど、=の右側でtrueかfalseかを判断する、と。 
=の左が代入される側ということを失念して、>で式を分けるという、 
大ボケをしておりました。参考になりました。
投稿者 なべ  () 投稿日時 2008/2/25 07:08:00
自己レスです。 
何とか解決しました。 
少し長いですが書き出します。 
lineはこの中に入れずに最初に定義しておきます。 
dim line as integer = 0 
 
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 
 
        Dim fnt As New Font("MS UI Gothic", 9) 
        Dim LineHeight As Single = fnt.GetHeight(e.Graphics) 
 
        Dim X As Integer = 50 
        Dim Y As Integer = 50 
        Static tl As Integer = logdisp.Items.Count - 1 
        Do Until line = tl 
            logtext = logdisp.Items(line) 
            e.Graphics.DrawString(logtext, fnt, Brushes.Black, X, Y) 
            Y += LineHeight 
            line = line + 1 
            If line <> tl Then 
                If Y + LineHeight > e.MarginBounds.Y + e.MarginBounds.Height Then 
                    e.HasMorePages = True 
                    Exit Do 
                End If 
            Else 
                e.HasMorePages = False 
            End If 
        Loop 
 
        If e.HasMorePages = False Then 
            fnt.Dispose() 
        End If 
        Exit Sub 
    End Sub 
あちらこちらにVB中学校さんのサンプルから引っ張った後がありますがお許しを。