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