| ホーム | 機能紹介 | ドキュメント | ダウンロード |
カスタムフィールドこの項では、独自のフィールドプロバイダを作成する方法について説明します。 フィールドプロバイダを作成することで、独自の形式のフィールドを利用することができるようになります。 CFieldProviderクラスフィールドプロバイダはIFieldProviderインターフェースを実装することで作成できます。 ただし、通常は代表的な実装クラスであるCFieldProviderクラスを継承して作成してください。 CFieldProviderクラスには、サブクラスから利用されることを想定した有用なメソッドがいくつか含まれています。 CFieldProviderクラスの重要なメソッドを以下に示します。 これらのメソッドは全てオーバーライド可能です。
フィールドプロバイダには他に、以下のプロパティを持ちます。
サンプル 数値のカンマ編集以下のようなフィールドを生成してみましょう。
水平方向アライメントを右寄せとし、フィールドの値をカンマ編集して表示します。 フィールドプロバイダの定義は以下のようになります。 アライメントの制御はSettingで行います。 また、カンマ編集はformatValueメソッドで行います。
Class CCammaFieldProvider
Inherits CFieldProvider
'Captionをコンストラクタに渡せるようにする
Public Sub New(ByVal caption As String)
MyBase.New(caption)
End Sub
Protected Overrides Function formatValue(ByVal v As Object) As String
Return Format(v, "#,###")
End Function
Public Overrides Function Setting() As UTable.CSetting
Dim s As New UTable.CSetting
s.HorizontalAlignment = UTable.EHAlign.RIGHT
Return s
End Function
End Class
フィールドの描画フィールドの描画はRenderメソッドで行われます。 このメソッドをオーバーライドすることで、フィールドの外観を自由に制御することができるようになります。 Renderメソッドからは以下のメソッドが呼ばれます。 これらのメソッドはオーバーライド可能です。
引数の意味はそれぞれ、gはグラフィクスオブジェクト、fieldは対象のフィールド、 sはフィールドの動的セッティング、rectはフィールドを描画すべき矩形、 alterはレコードのインデックスが奇数かどうかのブール値です。 フィールドの描画を制御する場合は、できるだけRenderメソッドを直接オーバーライドするのではなく、 これらのメソッドをオーバーライドしてください。 Renderメソッドをオーバーライドするならば、デコレータの制御なども自前で行わなければならなくなります。 renderBackgound、renderForegroundからは、以下のメソッドが呼ばれます。 これらのメソッドは全てsharedです。
参考のために、renderBackgroundメソッドのデフォルトの実装を以下に示します。
Protected Overridable Sub renderBackground(ByVal g As Graphics, _
ByVal field As UTable.CField, _
ByVal s As UTable.CDynamicSetting, _
ByVal rect As Rectangle, _
ByVal alter As Boolean)
RenderBackgroudRect(g, rect, BackColor(field, s, alter))
RenderBorder(g, rect, Me.BorderLine, _
field.Table.Setting.BorderColor, _
field.Table.Setting.BorderStyle)
End Sub
デフォルトのrenderForegoundの実装も以下に示します。
Protected Overridable Sub renderForeground(ByVal g As Graphics, _
ByVal field As UTable.CField, _
ByVal s As UTable.CDynamicSetting, _
ByVal rect As Rectangle, _
ByVal alter As Boolean)
If field.Editor Is Nothing Then
RenderValue(g, rect, Me.formatValue(field.Value), _
ForeColor(field, s, alter), s.Font, s.GetStringFormat)
End If
End Sub
サンプル グラフ表示以下のようなフィールドを生成してみましょう。
renderForegroundメソッドをオーバーライドし、グラフが描画されるようにします。 また、アジャストを行ったときに、グラフがちょうど収まるサイズに調整されるようにします。 フィールドプロバイダの定義は以下のようになります。 Renderメソッドをオーバーライドし、RenderValueを呼ぶ代わりに、グラフの矩形を描画します。 また、GetAdjustSizeをオーバーライドし、アジャストのサイズを返します。
Class CGraphFieldProvider
Inherits CFieldProvider
Public Sub New(ByVal caption As String)
MyBase.New(caption)
End Sub
Protected Overrides Sub renderForeground(ByVal g As Graphics, _
ByVal field As UTable.CField, _
ByVal s As UTable.CDynamicSetting, _
ByVal rect As Rectangle, _
ByVal alter As Boolean)
g.SetClip(rect)
Dim l As Integer = field.Value * 10
If l > 0 Then
Using b As New SolidBrush(Color.SteelBlue)
g.FillRectangle(b, New Rectangle(rect.X, rect.Y + 5, l, rect.Height - 10))
End Using
End If
g.ResetClip()
End Sub
Public Overrides Function GetAdjustSize(ByVal g As System.Drawing.Graphics, _
ByVal field As systembase.table.UTable.CField) _
As System.Drawing.Size
Return New Size(field.Value * 10, field.Table.DefaultGridSize.Row)
End Function
End Class
次へ ドキュメントのトップ / ホーム |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Copyright (c) 2009, SystemBase Co.,Ltd. |