6

フォーム上のオブジェクトのプロパティ (実際には複数のテキスト ボックス) にバインドされたテキスト ボックスがあります。これは、オブジェクトのエディターです。いくつかのオブジェクトを編集していて、テキスト ボックスの 1 つで値を変更すると、テキスト ボックスを終了できません (タブでも、別のテキスト ボックスをクリックしても)。ただし、常にそうであるとは限りません。(同じタイプの) 他のオブジェクトを編集する場合は問題なく動作します。

コード スニペットを次に示します。

txtValue.DataBindings.Add("Text", _SourceObject, "PlannedValue", True, DataSourceUpdateMode.OnPropertyChanged, Nothing, "c")
txtEstPlacements.DataBindings.Add("Text", _SourceObject, "EstimatedPlacementCount")
txtReference.DataBindings.Add("Text", _SourceObject, "Reference")

助言がありますか?

4

3 に答える 3

16

データ検証の問題のように聞こえます。フォーム上のコントロールの CausesValidation プロパティが true または false に設定されているかどうかを確認します。

フォームの AutoValidate プロパティも確認してください。おそらく、EnablePreventFocusChange (デフォルト) に設定されています。

また、テキスト ボックスに指定されている値を、ソース データ オブジェクトでバインドされているプロパティの型に変換できない場合もあります。これには Convert クラスが使用されていると思います (ただし、ここで間違っている可能性があります)。

winforms の検証について詳しく説明している MSDN のこの記事を参照してください。

于 2008-10-20T16:54:20.613 に答える
5

フォームに AutoValidate==EnablePreventFocusChange がある場合、検証に失敗したフィールドでフォーカスがスタックしてしまいます。

オブジェクトに値を書き込むときに例外が発生した場合、検証は失敗したと見なされることに注意してください。

カーソルが動かなくなったコントロールにバインドされているプロパティのセッターのエントリ ポイントにブレークポイントを設定してみてください。次に、例外が発生するかどうかを確認するための単一のステップ。

ブレークポイントが起動しない場合は、Databinding フレームワーク内で例外が発生している可能性があります。

一般に信じられていることとは反対に、データ バインディング フレームワークはエラーやその他の有用な情報をログに記録します。これには、System.Diagnostics 名前空間のサポートが使用されます。詳細は忘れましたが、MSDN に掲載されています。アプリケーションの実行中に、Visual Studio のメッセージ ウィンドウで診断を表示できるはずです。データバインディングに関する問題のトラブルシューティングに非常に役立ちます。

于 2008-10-22T10:06:48.830 に答える
5

databinding を textbox.textに設定できないために発生する検証の失敗を修正するにはDBNull.Value、Form_Load セクションに次の行を追加します。

TextBox1.DataBindings["Text"].NullValue = string.Empty;

空の値を正しく検証できるようにするテキスト ボックスごとに。

詳細については、Microsoft Connect を参照してください

と上:

空のテキストボックスをエスケープできません

于 2012-03-14T13:23:36.783 に答える