• 締切済み

CrystalReportViewerのPrintReport()メソッドについて

いつも参考にさせていただいております。 【質問内容】 クリレポビューアに表示される印刷ボタンをクリックするとPrintReport()メソッドが実行され、Windows標準の印刷ダイアログが起動します。 このWindows標準の印刷ダイアログを起動させたくないのです。 そこで考えてみたのですが、クリレポビューアのPrintReport()メソッドはOverridableなので、オーバーライドして独自の印刷処理を行うことなんて出来ないのでしょうか? 環境 VB.NET2003 OS WinXP Pro SP2

みんなの回答

回答No.4

ちょっと思い出したので、追記します。 PrintReportのオーバーライドではないかもしれません。 VB6でやったときのうす~い記憶の中で申し訳ないですが、各アイコンボタン押下イベントを利用していたと思います。 PrintButton_Click(?)のようなイベントをCrystalReportViewerが持っていて、その中で#2のようなことをしたような。。。

b-u-z-z
質問者

お礼

1050YENさん、どうもありがとうございました。 色々トライしてみたのですが、時間的なこともあり、断念しました。 ビューアにボタンを追加して、コモンダイアログを起動する方向になりました。

回答No.3

>クリレポビューアを使用してプレビュー画面を表示して、そこ(クリレポビューア)で表示される印刷ボタンアイコンを押下すると自動で印刷ダイアログが起動してしまうのを制御したいのです。 ですので、その印刷ボタンを押されたとき実行される、PrintReportをオーバーライドして、印刷命令をキャンセルしてあげるのです。 オーバーライドした関数のパラメータに印刷をキャンセルするパラメータが存在していませんか? そうすることにより、印刷はキャンセルされると思います。 しかし、そのままでは単なるキャンセルとなってしまうので、オーバーライドした中でPrintToPrinterメソッドを発行するわけです。 なので、別のボタンから実行するのではなく、PrintReportの中に埋め込むのです。 環境がないので、イメージで関数を書くと、、、 Protected Overrides Sub PrintReport(ByRal 印刷実行フラグ As Boolean)   'アイコン印刷ボタンの印刷発行をキャンセル   印刷実行フラグ = False   'ここでPrintToPrinterを発行   オブジェクト.PrintToPrinter(パラメータ達) End Sub という感じです。

回答No.2

すいません。環境がないままに話しているので、はずしているかもしれませんが、、、 PrintReportのパラメータにダイアログの表示/非表示の切り替えはありませんか? バージョンは違いますが、 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18807&forum=7 「PrintToPrinterメソッド」 というのが、現在のバージョンに存在しているかどうかわかりませんが、そちらで代用できませんか?

参考URL:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18807&forum=7
b-u-z-z
質問者

お礼

1050YEN 様 度重なるアドバイスありがとうございます。 私が実現したい機能は、クリレポビューアを使用してプレビュー画面を表示して、そこ(クリレポビューア)で表示される印刷ボタンアイコンを押下すると自動で印刷ダイアログが起動してしまうのを制御したいのです。 アドバイス頂いたものは、フォームにボタンを貼りつけてクリレポから印刷する時には機能するのですが、プレビューにてビューアの印刷ボタンアイコン押下時には、効かないと思うのです。 もう少し調べてみます。

回答No.1

.NET環境でのクリレポは使用したことがありませんが、説明を読んでいる限り可能だと思われます。 VB6+レポで、印刷ボタンを押されたときのイベントで同様のダイアログを出さずに、直接印刷命令を発行した覚えがあります。 確か、、、、 1.アイコンを押されたことによる、印刷命令をキャンセル 2.印刷実行メソッドの発行 って感じだったかな? レポの仕様が変わっていなければ、オーバーライドして、同様の処理を組み込むのかな? と、勝手に推測してますが、はずしていたらすいません。

b-u-z-z
質問者

お礼

1050YENさま アドバイスありがとうございます。 クリレポビューアのPrintReport()メソッドのオーバーライドはできました。 オーバーライドしたPrintReport()メソッドを呼び出して、独自コードの内容が実行されることも確認しました。 しかし、プレビュー画面でのクリレポビューアの印刷ボタンアイコン押下時には、やはりWindows標準の印刷ダイアログが起動され、オーバーライドしたPrintReport()メソッドは実行されませんでした。 >確か、、、、 >1.アイコンを押されたことによる、印刷命令をキャンセル >2.印刷実行メソッドの発行 1.の印刷命令のキャンセルというのは、Windows標準の印刷ダイアログの起動を抑制できるものなのでしょうか?

関連するQ&A