アットウィキロゴ

.NET 入力値エラーチェック

 [Error] As Stringのプロパティを実装し、エラーがある場合はエラーメッセージを、エラーがない場合はNothingを返す様にする。

 

IDataErrorInfoを実装するかどうか

基本的には実装しない。ただ、IDataErrorInfo.ErrorInfoItemが単なるReturn Nothing出ない場合は、実装する価値がある。

実装することのメリットは、ErrorProviderをバインドすることで、IDataErrorInfo.Errorにより勝手にバルーンがでること。

 

入力ダイアログの作り方

まず、ダイアログロード時に最初にDeepコピーを作り、それをバインドする(DeepCopyToメソッドを実装してく)。

表示値(Deepコピーされた値の、プログラムからの変更は、まずDeepコピーされたインスタンスのプロパティを変更し、その後BindingSource.ResetCurrentItem()を実行して、画面の表示を更新する)

バインドするときは、OnPropertyChangedでバインドするとよい(すると、Errorプロパティをラベルとバインドするとき、Errorがすぐに更新される)。INotifuChangedの実装は不要。

ただ、例えばTextBoxに数値型をバインドすると、デフォルトではロストフォーカスできなくなる。これを回避するには以下を行う。

ダイアログのLoad時にMe.AutoValidate = EnableAllowfacusChangeとする

OnClosingをオーバーライドし、e.Cancel = Falseの1文を加える(Closeできなくなる現象を防ぐため)

但し、TextBoxにString型、もしくはNumericUpDwonにDouble型をバインドするのみの場合は、これらは不要

参考 : http://msdn.microsoft.com/ja-jp/library/ms229603

もし、IDatqaErrorInfoを実装していれば(もしくはテキストボックスに数値型をバインドするときは)、ErrorProviderをバインドする。

 最後、OKボタンが押されたときに、ValidateChildrenを確認しIDataErrorInfoを実装しているときは、さらにErrorInfoItemを確認する。

もしOKなら、ShallowCopyToメソッドを使って、オリジナルのインスタンスに、ダイアログにバインドされているインスタンスの内容を書き込む。

 

 

最終更新:2011年08月26日 20:19