C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: PrintDocumentのOnPrintPageイベント


(過去ログ 89 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■52894 / inTopicNo.1)  PrintDocumentのOnPrintPageイベント
  
□投稿者/ 菜の花 (1回)-(2010/08/26(Thu) 23:55:22)

分類:[.NET 全般] 

開発環境:VisualStudio 2008
OS:XPSP3
言語:C#

質問させていただきます。

現在、印刷系アプリを作成しております。
印刷の実行はPrintDocumentクラスを使用しているのですが、印刷の終了条件に様々な条件があったため、PrintDocumentクラスを継承したクラスを生成し、そのクラス内で制御をおこなっております。

継承クラスでは、印刷実行処理として基底のPrint()を実行します。
それによるイベントOnPrintPate()内で、印刷の終了条件を判断し、終了条件に当てはまった場合、e.HasMorePage=falseにする予定です。


印刷データはDB(Excel,mdbファイル)から取得しています。
1レコードで1ページ分の出力を行う仕様で、複数レコードが存在する場合そのレコード分のページ数を印刷実行します。

使用例は以下の通りです。
1、印刷フォームにテキストフィールドを配置し、そのテキストとDBのカラムを関連付けます。
2、印刷実行すると、そのカラムに登録されている値をテキストフィールドに反映し、印刷をしていきます。
3、関連付けたカラムが2行からなるDBデータの場合、その2つが印刷対象データになります。
4、また、関連付けたカラムのレコードに印刷枚数が定義されており、その指定数分がそのレコード情報を出力します。

例>
氏名,年齢,性別,枚数 -->カラム名
-----------------------
hoge,20,男,3
moge,22,女,5


上記のようなDB情報を読み込み、印刷フォームにテキストフィールドを3つ配置し、それぞれに氏名、年齢、性別のカラムを関連付けたとします。
その状態で印刷を実行すると、そのレコードの枚数分出力するので・・・
hoge,20,男
hoge,20,男
hoge,20,男
moge,22,女
moge,22,女
moge,22,女
moge,22,女
moge,22,女

という出力結果になります。



【不具合】
DBの情報分の出力処理が終了したら、e.HasMorePage=falseにする予定だったのですが、ふたつ目のレコードを読み込みだした途端OnPrintPage()イベントが呼ばれなくなり、最終的には印刷処理が断続的に続くという現象になります。
(印刷実行時には標準の印刷実行中ダイアログが表示されているのですが、出力ページ数が増加し続けています)

ただ、断続的に行われた印刷処理後の出力物をみると、ふたつ目レコードは一つ分しかデータ生成されていませんでした。


OnPrintPage()イベントが最後まで通知されれば、特に問題は無いかと思っているのですが、そのイベントが通知されてこなくなる理由が分かりません。
デバッグをした結果、終了条件に不備がありe.HasMorePageをfalseにすることがない、ということは無いと思っています。


もし、原因/回避方法等、お分かりでしたらご教授のほどよろしくお願いいたします。




引用返信 編集キー/
■52923 / inTopicNo.2)  Re[1]: PrintDocumentのOnPrintPageイベント
□投稿者/ すなふきぬ (30回)-(2010/08/27(Fri) 22:39:51)
No52894 (菜の花 さん) に返信
> 開発環境:VisualStudio 2008
> OS:XPSP3
> 言語:C#
>
> 質問させていただきます。
>
> 現在、印刷系アプリを作成しております。
> 印刷の実行はPrintDocumentクラスを使用しているのですが、印刷の終了条件に様々な条件があったため、PrintDocumentクラスを継承したクラスを生成し、そのクラス内で制御をおこなっております。

これは俺もよく使う手だから別に問題ないと思います。

> デバッグをした結果、終了条件に不備がありe.HasMorePageをfalseにすることがない、ということは無いと思っています。

延々、印刷ページ数が増加しているなら、HasMorePageを疑ってみては?ブレーク貼ってHasMorePageがfalseになっているか?変なところでPrintメソッドを呼び出してないかとか。

複数ページの印刷をしようとしてるみたいだけど、そのデータ取得やPrintメソッドの呼び出しはどこでされていますか?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -