ホーム | 機能紹介 | ドキュメント | ダウンロード |
フィールドの値と編集モードこの項では、フィールドの値の制御と検証、そして編集モードについて説明します。 フィールドの値フィールドの値は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には編集モードをコードから直接制御するためのメソッドが用意されています。
SetValueIfValidatedメソッドフィールドのSetValueIfValidatedメソッドを使用すると、 エディタの存在しないフィールドでも、FieldValidatingイベントによるデータの検証ができます。 Field.SetValueIfValidated(value) 具体的に説明すると、SetValueIfValidatedメソッドを呼ぶと、 引数で渡されたvalueを初期値としたバッファが生成され、その後、FieldValidatingイベントが発生します。 そのイベントハンドラ内では、フィールドのValueはバッファの値を設定・取得するようになります。 これは、Valueが編集モード時にはエディタの値を設定・参照するのと似ています。 検証でキャンセルが行われると、バッファは捨てられます。 キャンセルされなかった場合、バッファの値はコミットされ、FieldValidatedイベントが呼ばれます。 これにより、エディタ上で値が編集されてコミットされる場合と区別することなく、 データ検証のコードを書くことができます。 次へ ドキュメントのトップ / ホーム |
||||||||
Copyright (c) 2009, SystemBase Co.,Ltd. |