通貨型の入力チェック
「\」記号が付加されていたり、数字がカンマで区切られたりする通貨型の表記および入力を行う方法です。通貨型の入力が正しいかどうかは、以下の順に判断します。
- テキストボックスのキー入力は通常の数値入力時と同様にKeyCharで判別し、整数値とBackSpaceのみを許可します。
OnEnterメソッドでフォーカスを取得したら、チェック行います。- 通貨型フォーマットで入力されたものを数値型に変換するため、円マーク(\)とカンマ(,)をTextプロパティから削除します。
- 数値の入力チェックを行います。
- チェックが終わった数値を通貨型に戻します。通貨型のフォーマットを形成するには、テキストボックスの内容をint型に変換し、Int32クラスの
ToStringメソッドでFormatを指定して変更します。
以下、実際のソースです。まず、OnEnterメソッドとOnLeaveメソッドをオーバーライドします。
protected override void OnEnter(EventArgs e) { base.OnEnter (e); } protected override void OnLeave(EventArgs e) { base.OnLeave (e); }
数値型への変換のため、OnEnterメソッドに、以下のロジックを追加します。this.Text.Remove( index, 1 )部分で先頭の円マークを削除し、Replace(",", string.Empty)部分でカンマを空白(string.Empty)に変換して削除します。
int index = this.Text.IndexOf("\\"); if ( index >= 0 ) { this.Text = this.Text.Remove( index, 1 ).Replace(",", string.Empty); }
数値に変換したら入力チェックを行います。数値のチェックですので、正規表現^[0-9]+$で行います。
チェックが終わったら通貨型に戻します。OnLeaveメソッドを使い、フォーカスが離れたときに数値型のフォーマットから通貨型のフォーマットに変更しています。通貨型のフォーマットを形成するには、テキストボックスの内容をint型に変換し、Int32クラスのToStringメソッドでFormatを指定し、通貨表記に変更します。
if ( this.Text.Length != 0 ) { this.Text = Convert.ToInt32(this.Text).ToString("C"); }
フォーカスが移動した際に行われる入力チェック
フォーカスが移動するときに入力チェックを行うことも可能です。上記の入力チェックメソッドをプロパティにより実行する/しないを設定できるようにしておけば、拡張したコントロールを利用するアプリケーション側でいろいろと利用することができます。
まず、OnValidatingのオーバーライドを追加します。
protected override void OnValidating( System.ComponentModel.CancelEventArgs e) { base.OnValidating (e); }
入力チェックメソッドを呼び出します。
string errorMessage = this.InputCheck();
入力チェックに引っかかった場合、errorMessageにエラー内容が格納されます。あとは必要に応じて、エラーメッセージをMessageBoxやErrorProviderで表示することができます。
標準のプロパティとの併用について
標準のTextBoxには、入力できる文字の最大数を制御する「MaxLength」や、コントロールの IME (Input Method Editor) モードを制御する「ImeMode」プロパティが存在します。これらを併用することで、より決め細やかな入力制御を行うことができると思います。
