| ホーム | 機能紹介 | ドキュメント | ダウンロード |
カスタムフィールドこの項では、独自のフィールドプロバイダを作成する方法について説明します。 フィールドプロバイダを作成することで、独自の形式のフィールドを利用することができるようになります。 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メソッドからは以下のメソッドが利用されます。 これらのメソッドは全てSharedです。
参考のために、Renderメソッドのデフォルトの実装を以下に示します。
Public Overridable Sub Render(ByVal g As Graphics, _
ByVal field As UTable.CField, _
ByVal rect As Rectangle, _
ByVal alter As Boolean) _
Implements IFieldProvider.Render
Dim s As UTable.CDynamicSetting = field.DynamicSetting
RenderBackgroud(g, field, rect, BackColor(field, s, alter))
RenderBorder(g, rect, Me.BorderLine, _
field.Table.Setting.BorderColor, field.Table.Setting.BorderStyle)
If field.Editor Is Nothing Then
RenderValue(g, field, rect, Me.formatValue(field.Value), _
ForeColor(field, s, alter), s.Font, s.GetStringFormat)
End If
End Sub
デフォルトのRenderメソッドではまず、フィールドの動的セッティングを生成しています。 これにより、フィールドに設定されるべきフォントや色などを取得することができます。 次に、背景と境界線を描画します。 最後に、そのフィールドが編集モードでない時に限り、フィールドの値を描画します。 背景色と前景色はそれぞれ、BackColorとForeColorメソッドで得ます。 このメソッドは、そのフィールドがフォーカスを得ているか否かや、 レコードのインデックスが偶数なのか奇数なのかといった条件から色を決定します。 サンプル グラフ表示以下のようなフィールドを生成してみましょう。
Renderメソッドをオーバーライドし、グラフが描画されるようにします。 また、アジャストを行ったときに、グラフがちょうど収まるサイズに調整されるようにします。 フィールドプロバイダの定義は以下のようになります。 Renderメソッドをオーバーライドし、RenderValueを呼ぶ代わりに、グラフの矩形を描画します。 また、GetAdjustSizeをオーバーライドし、アジャストのサイズを返します。
Class CGraphFieldProvider
Inherits CFieldProvider
Public Sub New(ByVal caption As String)
MyBase.New(caption)
End Sub
Public Overrides Sub Render(ByVal g As System.Drawing.Graphics, _
ByVal field As UTable.CField, _
ByVal rect As Rectangle, _
ByVal alter As Boolean)
Dim s As UTable.CDynamicSetting = field.DynamicSetting
RenderBackgroud(g, field, rect, BackColor(field, s, alter))
RenderBorder(g, rect, Me.BorderLine, _
field.Table.Setting.BorderColor, field.Table.Setting.BorderStyle)
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. |