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

わんくま同盟

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

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


(過去ログ 89 を表示中)
■52894 / )  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にすることがない、ということは無いと思っています。


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




返信 編集キー/


管理者用

- Child Tree -