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
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 - グレープシティ株式会社