- - PR -
レポート、プリンタ設定
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-19 12:08
うーん、この手の実行時の例外は、[コンパイル解決] していれば発生しません。 率直に言いますと、「何故 rpt は型が指定されていないのでしょうか?」 ということです。 変数 rpt は、"New rptレポート" という構文によってインスタンスを持っています。 が、その型が正当であるかどうかは、実行時にしかわからないですよね。 (この方式は、[実行時バインディング]、[遅延バインディング] などと呼びます) 例外のメッセージを良く読んでみてください。 「実行時に取得している "rpt レポート" という型のインスタンスに、 'PrinterSettings' という (公開されている) メンバがない」 と言っています。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-07-19 12:15
返答ありがとうございます。
型宣言がないからかと思いまして、宣言文を Public Shared rpt As DataDynamics.ActiveReports.ActiveReport に変更しました。 そうすると、 rpt.PrinterSettings.PrinterName = str_PName の部分でコンパイルエラーが起こり、 'PrinterSettings' は 'DataDynamics.ActiveReports.ActiveReport' のメンバではありません。 と、出てしまいました。 activ repを使った場合のプリンタ名を設定する場合は、根本的に違うのですかね・・・ | ||||||||||||
|
投稿日時: 2006-07-19 12:44
これが、型指定をすることによる 「実行前のエラー検出」 です。 型指定していないと、このような旨みも逃します。 (VB の場合は、遅延バインディングを防ぐために、Option Strict On にしましょう)
その Report クラスのメンバ (基底クラスのメンバ含む) を、 「オブジェクト ブラウザ」 などで、もう 1 度良く見てください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-07-19 13:13
返答ありがとうございます。
いろいろ試した結果、 rpt.PrinterSettings.PrinterName = str_PNameとかで、入れるのではなく、レポートオープン時にいれる方法を見つけて、そちらでできるようになりました。 PrinterNameに入れるものだと思って、そこばかり見ていたのがだめでしたね。 いろいろありがとうございました。 | ||||||||||||
|
投稿日時: 2006-07-19 14:45
その方法は具体的にどのようなものでしょうか? 同じ問題で悩む第三者のためにも、フィードバックをお願いします。 Report のオープン時... というのが良くわかりませんが、 レポート内部 / 外部に関わらず、同じことだと思います。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-07-19 16:17
返答遅くなりました。
*グローバル* Public Shared rpt As DataDynamics.ActiveReports.ActiveReport *プレビュー画面load時* rpt = New rptレポート '余白設定 rpt.PageSettings.PaperKind = str_RSize rpt.PageSettings.Orientation = str_RDir rpt.PageSettings.Margins.Top = str_RMtop rpt.PageSettings.Margins.Bottom = str_RMbottom rpt.PageSettings.Margins.Left = str_RMleft rpt.PageSettings.Margins.Right = str_RMright rpt.Run() Me.Viewer1.Document = rpt.Document *レポートReportStart時* Private Sub rptレポート_ReportStart(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ReportStart Me.Document.Printer.PrinterName = str_PName '←プリンタ名 end sub と、プレビューフォームで余白は設定し、レポートReportStart時に、プリンタ名を入れてあげることにより、動作いたしました。 もし、違うやり方で効率がいいやり方がありましたら、ご教授いただけると幸いです。 | ||||||||||||
|
投稿日時: 2006-07-19 17:04
私の予想どおりで、やっていることは一緒ですよね。 もう 1 度、前のレスを読んで頂ければ幸いです。 レポートのインスタンス内 (Me) から Document メンバを参照するのと、 レポート外 (rpt) から Document メンバを参照するのとでは同じです。 Me.Document == rpt.Document です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-07-19 18:24
そうですね。
となると、レポート外 (rpt)でやったほうが、コーディング的にも見やすいですよね。 レポート外 (rpt)の方でやろうと思います。 ありがとうございました。 |