データバインドテキストボックス:終了できません
-
03-07-2019 - |
質問
フォーム上のオブジェクトのプロパティ(実際には複数のテキストボックス)にバインドされたテキストボックスがあります。これは、オブジェクトのエディターです。一部のオブジェクトを編集し、テキストボックスのいずれかの値を変更しているとき、テキストボックスを終了できません(タブでも別のテキストボックスをクリックしても)。ただし、常にそうであるとは限りません-(同じタイプの)他のオブジェクトを編集するときは正常に動作します。
コードスニペットは次のとおりです。
txtValue.DataBindings.Add("Text", _SourceObject, "PlannedValue", True, DataSourceUpdateMode.OnPropertyChanged, Nothing, "c")
txtEstPlacements.DataBindings.Add("Text", _SourceObject, "EstimatedPlacementCount")
txtReference.DataBindings.Add("Text", _SourceObject, "Reference")
提案はありますか
解決
データ検証の問題のように聞こえます。フォームのコントロールのCausesValidationプロパティがtrueまたはfalseに設定されているかどうかを確認します。
フォームのAutoValidateプロパティも確認してください。おそらくEnablePreventFocusChange(デフォルト)に設定されています。
テキストボックスに指定されている値を、ソースデータオブジェクトでバインドされているプロパティの型に変換できない場合もあります。 Convertクラスはこれに使用されると思います(ここでは間違っているかもしれませんが)。
MSDNのこの記事をご覧ください。 winforms検証の詳細。
他のヒント
フォームにAutoValidate == EnablePreventFocusChangeがある場合、検証に失敗したフィールドにフォーカスが固定されます。
値をオブジェクトに書き込むときに例外がある場合、検証は失敗したと見なされることに注意してください。
カーソルがスタックするコントロールにバインドされているプロパティのセッターのエントリポイントにブレークポイントを設定してみてください。次に、単一のステップで例外が発生するかどうかを確認します。
ブレークポイントが発生しない場合、Databindingフレームワーク内で例外が発生している可能性があります。
一般に信じられていることに反して、データバインディングフレームワークはエラーやその他の有用な情報をログに記録します-これを行うためにSystem.Diagnostics名前空間のサポートを使用します。詳細は忘れましたが、MSDNにあります-アプリケーションの実行中に、Visual Studioのメッセージウィンドウで診断を表示できるはずです。データバインディングの問題のトラブルシューティングに非常に役立ちます。
検証の失敗を修正するには、データバインディングが DBNull.Value
をtextbox.textに設定できないために、Form_Loadセクションに次の行を追加します。
TextBox1.DataBindings["Text"].NullValue = string.Empty;
空の値を正しく検証できるようにする各テキストボックスについて
以降: