複数ページの印刷
投稿者 なべ  ()
投稿日時
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」の意味というか使い方がわかりません。
こちらについても判る方がいらっしゃいましたらご教授、宜しくお願いいたします。
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 かを左辺に入力しているのですね。
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かを判断する、と。
=の左が代入される側ということを失念して、>で式を分けるという、
大ボケをしておりました。参考になりました。
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中学校さんのサンプルから引っ張った後がありますがお許しを。
何とか解決しました。
少し長いですが書き出します。
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中学校さんのサンプルから引っ張った後がありますがお許しを。
テキストファイルを読み込み、
必要なデータをリストボックスに表示して
印刷しようとしています。
印刷を実行したら1ページ目のみ印刷されました。
これは「HasMorePages」で回避する事が出来ると思ったのですが今度は必要なページで停める事が出来ません。
「Listbox.Items.Count」でリストボックスの要素数を取り出して
印刷するページ数は計算できるのですがうまく動作しません。
「HasMorePages=true」を最終ページ印刷時に「False」にする方法・
Tips・サンプルなどご教授頂きたいと思います。
宜しくお願いいたします。