- - PR -
コーディング方法 共通モジュールの作成
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-17 19:26
言語:Microsoft Visual Studio 2008
データベース:SQL Server 2005 非接続型のデータアクセスです。 ツール:ActiveReports for .NET 3.0J SP2 Pro 何度もお世話になります。 ActiveReportsで帳票を作成しています。 レポートの余白設定を、コード上で動的に設定しています。 下記のコードだと、"strNO"が増える度にどんどん同じようなコードが増えて行くので、"strNO"を引数にして共通モジュールに移したいと思っています。 (***の中を共通モジュールにしたい) Dim rpt As New rpt100() rpt.PageSettings.Margins.Top = rpt100.CmToInch(PrtInfo.MarginTop) の"rpt100"をどのように記述すればよいでしょうか? また、戻ってきた時のrpt.Run()のrptも・・・ ご教授お願いします。 Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click Dim f As New frm01() Select Case strNO Case "100" ’************************************************************** Dim RptInfo As New clsReportInfo Dim PrtInfo As New PrintInfo Dim rpt As New rpt100() 'レポート情報取得 RptInfo.getPrtInformation(strNO, PrtInfo) '余白の設定 rpt.PageSettings.Margins.Top = rpt100.CmToInch(PrtInfo.MarginTop) rpt.PageSettings.Margins.Bottom = rpt100.CmToInch(PrtInfo.MarginBottom) rpt.PageSettings.Margins.Left = rpt100.CmToInch(PrtInfo.MarginLeft) rpt.PageSettings.Margins.Right = rpt100.CmToInch(PrtInfo.MarginRight) ’************************************************************** rpt.Run() f.Viewer.Document = rpt.Document End Select f.ShowDialog() f.Dispose() End Sub | ||||||||
|
投稿日時: 2009-02-18 01:18
こんばんは、passolです。
こんな、感じの事を期待していますか?(的外れでしたら、申し訳ありません。)
必ず、帳票を出す(もしくは、case文の中で、Exit Subを利用して帳票を入れる前にイベントメソッドを抜ける)なら、btnPreview_Click内は下記の方がいいと思います。(警告が嫌ならば、setMargin(strNO, rpt)はcase文内に入れてください。)
以上です。 [追記] 書こうと思って忘れていたんですが、クラス, メソッド, 変数等の名前付け(その言語の標準の命名規則の意識する。)を意識すると上達が早くなると思いますよ。(自分の事は、あえて棚にあげて書きます・・・) 余計な事を追記してすいませんでした。 頑張って下さい。 [/追記] [ メッセージ編集済み 編集者: passol 編集日時 2009-02-18 01:31 ] | ||||||||
|
投稿日時: 2009-02-18 05:18
passolさんのを元に(というかほとんど同じですが)私も書いてみました。
ビルドはしてません。 生成用のメソッド用意すればよいのではないかと思います。 これぐらいイベントとレポート作成を分離しておくと、他の個所から呼びやすくなるかと。
[ メッセージ編集済み 編集者: デューン 編集日時 2009-02-18 05:22 ] | ||||||||
|
投稿日時: 2009-02-18 09:22
条件に応じて処理を切り替えたい場合には「デリゲート」を使う方法があります。
' レポート生成処理に渡す引数 public class ReportCreationArgs ReportNumber as string end class ' レポートを生成するメソッドを表すデリゲート public delegate function ReportCreation( args as ReportCreationArgs ) as Report ' レポート番号をキー、生成処理を値とするディクショナリ private reportFactory as Dictionary(of ReportCreationArgs, ReportCreation ) ' レポート生成処理をあらかじめ準備 reportFactory.Add( "100", addressof CreateReport100 ) reportFactory.Add( "200", addressof CreateReport200 ) private function CreateReport100( args as ReportCreationArgs ) as Report dim rpt as rpt100 rpt = new rpt100 '個別の処理があればここで return rpt end function private function CreateReport200( args as ReportCreationArgs ) as Report dim rpt as rpt200 rpt = new rpt200 '個別の処理があればここで return rpt end function Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click dim creation as ReportCreation ' レポート番号に対応する生成処理を取得 if ( not reportFactory.TryGetValue( strNO, creation ) ) then ' 生成処理が登録されていないときの処理 end if ' 引数を生成 dim args as ReportCreationArgs = new ReportCreationArgs() args.ReportNumber = strNO ' レポートを生成 dim rpt as Report = creation( args ) 'レポート情報取得 RptInfo.getPrtInformation(strNO, PrtInfo) '余白の設定 rpt.PageSettings.Margins.Top = rpt100.CmToInch(PrtInfo.MarginTop) rpt.PageSettings.Margins.Bottom = rpt100.CmToInch(PrtInfo.MarginBottom) rpt.PageSettings.Margins.Left = rpt100.CmToInch(PrtInfo.MarginLeft) rpt.PageSettings.Margins.Right = rpt100.CmToInch(PrtInfo.MarginRight) rpt.Run() f.Viewer.Document = rpt.Document End Select f.ShowDialog() f.Dispose() End Sub | ||||||||
|
投稿日時: 2009-02-18 10:37
みなさんありがとうございます。
いろんな方法あり大変勉強になりました。 |
1