ホーム | 機能紹介 | ドキュメント | ダウンロード |
カスタムフィールドこの項では、独自のフィールドプロバイダを作成する方法について説明します。 フィールドプロバイダを作成することで、独自の形式のフィールドを利用することができるようになります。 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. |