ActiveReportsで拡張メソッド

ActiveReportsの場合、レポートデザイナのプロパティウィンドウ上ではLocationやSizeをcm単位で入力することが可能です。



この設定は、メニュー[レポート]の[レポートの設定]ダイアログにある[グローバル設定]タブの[ルーラの単位]というところで変更することができます。


しかしながら、コード上でこれらのプロパティを扱う場合にはインチの単位にしなければならず、そのための静的メソッドととしてCmToInchメソッドとInchToCmメソッドが用意されています。ちょっとしたことですが、拡張メソッドを使って下記のようにしてみると少しは楽かなと思い書いてみました。


Visual Basic

Imports System.Runtime.CompilerServices
Imports DataDynamics.ActiveReports
Imports DataDynamics.ActiveReports.Document
 
Module ARExtensions
 
    <Extension()> Function Cm(ByVal inch As Single) As Single
        Return CType(inch / 2.54, Single)
    End Function
 
    <Extension()> Function WidthCm(ByVal inchSizeF As SizeF) As Single
        Return CType(inchSizeF.Width * 2.54, Single)
    End Function
 
    <Extension()> Function HeightCm(ByVal inchSizeF As SizeF) As Single
        Return CType(inchSizeF.Height * 2.54, Single)
    End Function
 
End Module
 
Public Class NewActiveReport1
 
    Private Sub Detail_Format(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Detail.Format
        Me.Label1.Width = CmToInch(3.5F)
        Me.Label1.Height = CmToInch(3.5F)
 
        Me.TextBox1.Width = 3.5F.Cm
        Me.TextBox1.Height = 3.5F.Cm
 
        Me.Label1.Text = "Width:" + Label1.Size.WidthCm.ToString() + "センチ"
        Me.TextBox1.Text = "Height:" + Label1.Size.HeightCm.ToString() + "センチ"
 
    End Sub
 
End Class


本来なら設定用はFromCmメソッド、参照用はToCmメソッドという名前が良いのかもしれませんが、できる限り短くしたかったのと、参照より設定が多いかなということで設定用をCmメソッドにして参照用はSizeF構造体の方に持っていきました。VBだと引数なしメソッドの括弧を省略できるのも、この場合はグッドです。


でもあまり変わらない・・・でしょうか。


ちなみにVisual Studio 2008対応のActiveReports for .NET 3.0Jは3/26に公開になっています。

アプリケーション開発支援ツール/コンポーネント/ライブラリ | Developer Tools - グレープシティ株式会社