UTable .NET Framework用 表入力コンポーネント
ドキュメント

フィールドの値と編集モード

この項では、フィールドの値の制御と検証、そして編集モードについて説明します。

フィールドの値

フィールドの値はValueプロパティで設定・取得できます。

    Field.Value = v
    v = Field.Value

編集モード

ユーザがキーボードからフィールドの値を入力する際、 フィールド上に入力用のコントロールが出現します。 このコントロールをエディタと呼び、 エディタが出現している状態を編集モードと呼びます。

編集モード中はテーブルのEditorプロパティで、エディタを取得することができます。 編集モードではないとき、Editorの値はNothingとなります。 これにより、現在の状態が編集モードかどうかを判断することができます。

    If Table.Editor IsNot Nothing Then
        '編集モードの場合の処理
    End If    

また、フィールドもEditorプロパティを持っています。 このプロパティは、そのフィールドが編集モードの場合のみエディタを返します。 これにより、特定のフィールドが編集モードかどうかを判断できます。

編集モードの開始

デフォルトでは、編集可能フィールドの上でユーザがマウスのダブルクリックを行うか、 キーボードのF2キーまたは文字のキーを押下すると編集モードに入ります。

フィールドが編集可能であるためには、そのフィールドがフォーカスを得ることが可能で、 かつ対応するフィールドプロバイダにエディタを生成する方法が定義されていなければいけません。 例えば、CTextFieldProviderにはエディタとしてテキストボックスを利用することが定義されています。

フィールドの編集モードが開始されようとすると、EditStartingイベントが発生します。

    Event EditStarting(field, editable)

このイベントが終了した時点で、引数editableの値がALLOWならば、編集モードが開始されます。 DISABLEならば、編集モードは開始されません。 editableの初期値は、フィールドのセッティング(詳細はこちら)のEditableプロパティの値になります。 つまり、フィールドが編集モードを開始できるかどうかは、 デフォルトではセッティングによって決まりますが、 EditStartingイベントハンドラを書くことで、その動作を修正できます。

編集モードを開始することが許可されると、まずエディタのインスタンスが作成され、InitializeEditorイベントが発生します。 このイベントハンドラで、エディタのプロパティをカスタマイズすることができます。 次に、エディタにフィールドの値、サイズ、位置などが設定され、テーブルのサブコントロールとして表示されます。 最後に、EditStartイベントが発生します。 ここまでの流れを下図に示します。

編集モード中の値

編集モード中にフィールドのValueプロパティを用いると、エディタの値を設定・取得できます。 ただし実際には、この時点ではフィールドそのものは編集モードに入る直前の値を保持しています。 エディタを無視してフィールドの値を取得する場合は、CommittedValueメソッドを用いてください。 また、エディタを無視してフィールドに値を設定(コミット)するにはValueCommitメソッドを用いてください。

編集された値の検証と編集モードの終了

編集が終わり、エディタからフォーカスが抜けようとすると、 FieldValidatingイベントが発生します。 このイベントハンドラで、入力された内容が妥当かを検証してください。 イベントハンドラの引数に渡されたe.CancelをTrueとすることで、 エディタからフォーカスが移ることをキャンセルできます。

キャンセルされなかった場合、つまり検証により値が妥当と認められた場合は、 FieldValidatedイベントが発生し、その後、編集モードは終了され、 エディタ上の値がフィールドの値としてコミットされます。

編集モードが終了されると、EditFinishedイベントが発生します。 ここまでの流れを下図に示します。

編集モードとValueChangedイベント

フィールドの値が変更されると発生するイベントには、 FieldValueChangedイベントと、EditorValueChangedイベントの2つがあります。 FieldValueChangedイベントは、フィールドそのものの値が変更された時(コミット時)に発生し、 EditorValueChangedイベントは、エディタ上で値の編集が行われたときに発生します。 なお、編集モードではない時にValueへの代入が行われた場合は、 即座にコミットされるので、FieldValueChangedイベントが発生します。 このことを、以下の図に示します。

編集モードを制御するメソッド

UTableには編集モードをコードから直接制御するためのメソッドが用意されています。

メソッド説明
StartEdit() 編集モードを開始します
現在フォーカスを得ているフィールドが対象となります
編集モードを開始できたときは、Editorを返します
LeaveEdit()
LeaveEdit(direction)
編集モードを終了するために、FieldValidatingイベントを発生させます
キャンセルされなかった場合、編集モードは終了されます
directionを与えると、編集モード終了後に
キーボードオペレーションのLeaveEditメソッドが呼ばれます (詳細はこちら)
FinishEdit()
FinishEdit(valueCommit)
編集モードを強制的に終了させます
このメソッドを呼ぶと、FieldValidatingもFieldValidatedも発生させることなく
編集モードを終了することができます
valueCommitにTrueを渡すと、エディタの値がフィールドにコミットされます
省略時はコミットは行われません

SetValueIfValidatedメソッド

フィールドのSetValueIfValidatedメソッドを使用すると、 エディタの存在しないフィールドでも、FieldValidatingイベントによるデータの検証ができます。

    Field.SetValueIfValidated(value)

具体的に説明すると、SetValueIfValidatedメソッドを呼ぶと、 引数で渡されたvalueを初期値としたバッファが生成され、その後、FieldValidatingイベントが発生します。 そのイベントハンドラ内では、フィールドのValueはバッファの値を設定・取得するようになります。 これは、Valueが編集モード時にはエディタの値を設定・参照するのと似ています。 検証でキャンセルが行われると、バッファは捨てられます。 キャンセルされなかった場合、バッファの値はコミットされ、FieldValidatedイベントが呼ばれます。

これにより、エディタ上で値が編集されてコミットされる場合と透過にデータ検証のコードを書くことができます。

次へ    ドキュメントのトップ / ホーム


Copyright (c) 2009, SystemBase Co.,Ltd.
All rights reserved.