PowerTools SPREAD for Windows Forms 10.0J > 開発者ガイド > 編集、検証、選択、フォーカス > 検証 > 入力値の検証 |
セルの内容を、さまざまな方法で検証できます。いくつかの検証機能は、セル型に応じて自動的に実行されます。これ以外にも、イベントを監視して、その発生に基づく検証ルーチンを実行することで、ユーザーによる入力を検証できます。また、ユーザーがセル型に応じた有効値を入力したかどうかを検査する簡単な方法として、IsValidメソッドを使用する方法があります。このメソッドは、すべてのセル型クラスで使用できます。以下、それぞれの検証方法について説明します。
各セル型はユーザーの入力を検証し、セル型の書式および設定要件を満たしているかどうかを調べます。コントロールは実行時、ユーザーまたはコードによってデータが入力されたとき、またコントロールがフォーカスを失ったとき、あるいはその両方の時点でデータを検証します。ユーザーによるデータ入力は、入力または貼り付けによるもの、コードからの入力は、プロパティ設定またはデータベースからの入力が有効です。基本的に、これらの方法によるデータ入力は、コントロールですべて同様に処理され、データが有効かどうかが検証されます。
設定した最小値(MinimumValue、MinimumDate、MinimumTimeプロパティ)未満の値が入力されても、コントロールでは許可されます。ユーザーが部分的な値を入力して、後から最小値以上の値に変更できるように、コントロールは最小値未満の値も受け入れ可能である必要があります。たとえば、MinimumValueプロパティが100に設定されている場合、ユーザーがこの値を 124 に変更する場合を考えます。ユーザーはこの既存値を選択し、まず「1」という値を入力します。これは、有効な最小値よりも小さな値です。しかし、ユーザーが引き続き入力することで、この値は「12」、「124」へと変わります。最終的な入力値は、有効な最小値を超える値になります。コントロールがフォーカスを失ったとき、ユーザーの入力した値が最小値より小さいかどうかが検証されます。
コンポーネントによるデータの検証中に、ユーザーが無効な値を入力しようとしたり、無効な値がコードやデータベースから入力されたりすると、UserErrorイベントが発生します。
どのセル型も、有効なデータを区別するためのデフォルトの制約を備えています。 たとえば通貨型セルでは、数値データの入力が想定されているため、「abcd」のようなテキスト文字列は無効とみなされます。 このほか、各セル型のプロパティを設定することで、有効なデータを指定できます。
次の表は、編集可能な各セル型で許容されるデフォルトのデータを表します。
セル型 | デフォルト | 有効なデータの例 |
---|---|---|
通貨型 | 数値データ。通貨記号、区切り記号、および小数点記号を表す文字を含めることができます。 | $3.45 $1,234.56 £45 |
日付時刻型 | 日付と時刻のデータ。区切り記号を含めることができます。 | 8/16/2002、 Monday、August 05、2002 4:40 PM |
GcDateTime |
日付と時刻データ(区切り文字を含めることも可能) |
8/16/2002、 Monday, August 05, 2002 4:40 PM |
GcCharMaskまたはGcMask |
マスク文字列の条件を満たす任意の文字に適合 |
|
GcComboBoxまたはGcTextBox |
任意の文字に適合 |
|
GcNumber |
数値データ(3桁区切り文字、小数点記号を含めることも可能) |
3.45 1,234.56 |
GcTimeSpan |
TimeSpanデータ(区切り文字を含めることも可能) |
|
数値型 | 数値データ。区切り記号および小数点記号を表す文字を含めることができます。 | 3.45 1,234.56 |
マスク型 | マスク文字列の基準を満たす任意の文字 | |
パーセント型 | 数値データ。パーセント記号、区切り記号、および小数点記号を表す文字を含めることができます。 | 0.5 1,234% |
テキスト型 | 任意の文字 | |
ハイパーリンク型 | 任意の文字 | |
標準型 | 任意の文字 |
各セル型の違いの詳細については、「セル型」を参照してください。
次の表は、有効データを追加定義するために設定可能なプロパティを示します。
セル型 | 有効データを定義するためのセル型プロパティ |
---|---|
通貨型 | MaximumValue、MinimumValue |
日付時刻型 | MaximumDate、MinimumDate、MaximumTime、MinimumTime |
GcCharMask | FormatString |
GcCharMaskまたはGcMask | Pattern、MaxLength、MinLength |
GcComboBox | MaxLength、MaxLengthUnit、FormatString |
GcDateTime | MaxDate、MinDate、MaxMinBehavior |
GcNumber | MaxValue、MinValue、MaxMinBehavior、ValueSign |
GcTextBox | MaxLength、MaxLengthUnit、MaxLengthCodePage、FormatString |
GcTimeSpan | MaxValue、MinValue、MaxMinBehavior、ValueSign |
数値型 | MaximumValue、MinimumValue |
マスク型 | Mask、MaskChar |
パーセント型 | MaximumValue、MinimumValue |
テキスト型 | MaxLength |
次の表は無効な値(MaxLengthより長い/MaximumValueプロパティより大きい)を設定した際の動作を示します。
アクション | テキスト型セル | 数値型セル | GcTextBox型セル | Error/EditErrorイベント発生の有無 |
---|---|---|---|---|
編集時の入力 | R | R | R | ○ |
編集時の貼り付け | T | R | T | ○ |
非編集時の貼り付け(セル型+値) | P | P | P | × |
非編集時の貼り付け(値のみ) | T | R | T | ○ |
Valueプロパティによる設定 (または、ISheetDataModelクラスSetValueメソッド) | A | A | T | × |
Textプロパティによる設定 (または、SheetViewクラスSetTextメソッド) | T | R | T | × |
SheetViewクラスのSetValueメソッドによる入力 (validate = false) | A | A | T | × |
SheetViewクラスのSetValueメソッドによる入力(validate = true) | R(E) | R(E) | R(E) | × |
データ連結後にセル型を設定 | A | A | T | × |
ドラッグ&フィルによるセルのデータ入力 | T | R | T | × |
イベントを監視し、このイベントの発生に基づき特定の検証ルーチンを実行することができます。たとえばSheetViewクラスのChangedイベントは、ユーザーが編集モードを終了し、セルの内容が変更されたことをアプリケーションに通知します。より詳細な検証、たとえばユーザーが入力したデータではなく、クリップボードから貼り付けた値を検証する場合は、データモデル(DefaultSheetDataModelクラス)に対してChangedイベントを使用します。このようにイベントを監視することは、編集されたセルの内容を検証し、セルデータが無効な場合はエラーメッセージを生成するか、またはデータを初期値に戻す上でたいへん効果的です。
各セル型クラスのIsValidメソッドは、セルエディタの値が有効かどうかを検証します。コントロールは、このメソッドを内部で使用し、エディタに入力された値が有効かどうかを検査します。IsValidメソッドがTrueを返すのは通常、Formatメソッドが文字列以外の指定の値を、エディタで表示する文字列に変換できる場合、またはParseメソッドが指定の文字列値を、セルに適したデータ型の値に変換できる場合です。
高度な検証では、編集されたセル内容を評価できます。この場合、セルデータが無効な場合はエラーメッセージを生成するか、データを初期値に戻すことができます。これには、編集モードが有効になるたび、FpSpreadクラスのEditModeOnイベントを処理し、エディタコントロールを表すSuperEditBaseクラスおよびGeneralEditorクラスのInvalidOption、InvalidColor、CanValidate、およびUserEntryプロパティを設定しますが、コントロールの処理についての十分な知識がない限りは使用しないことをお勧めします。FpSpreadクラスのEditModeOffイベントの発生時には、データモデルの値はすでに変更されています。 まずEditModeOnイベントを処理し、いったんセル値を保存します。この後、EditModeOffイベントでは、セルの現在の値が検証に適合しなかった場合、この値を保存した値に戻します。