2010-12-27 27 views
2

フォームでは、メンバープロパティ "Title"にTextBoxをバインドしています。それに加えて、バインディングをテストするための「保存」ボタンがあります。C#TextBoxをコミットするには?

テキストボックスのフォーカスが失われない限り、基本となるオブジェクトプロパティのようなものは更新されません。しかし、使用するform.ActiveControl.Blur()はありません。しかも、これは健全なハックのようには見えません。

とにかくこれを改善するには?ありがとう。

編集:申し訳ありませんが明確ではありません。私の質問はタイトル: "テキストボックスをコミットする方法"です。私は、DataGridViewコミットとBindingSource commitから "commit"という用語を使用します。それはWinFormsにあります。 (WPFを使ったことがないので、私には起こりませんでした。)

実際のシナリオは、1つのオブジェクトのプロパティにバインドされたTextBoxの束があることです。ユーザーがすべてのTextBoxに値を入力し、ユーザーが保存(ツールバーボタン)をクリックすると、最後のTextBoxはまだフォーカス(または編集モード)にあるため、最後のテキストボックスの最後の値は保存されません。

保存する直前にテキストボックスの値を「コミット」する正しい方法を見つけたいと思います。

ありがとうございました。

+4

このWinFormsまたはWPFですか? –

+0

'' Blur'メソッドは何をしますか?ここで何を求めているのかははっきりしない。 *何か*常に焦点を持っている必要があります。フォーカスをテキストボックスからフォーム上の別のコントロールに変更する方法を知りたいだけですか? –

+0

ここで何を達成したいのか、具体的に教えてください –

答えて

1

の質問は、これはリサイズであることを示すために更新されているので、あなたは少し違った、これはWPFアプリケーションであればよりも、物事を処理する必要があります。幸いにも、その解決策は非常に簡単であることが判明しました。

たび「保存」ボタンをユーザーがクリックするには(そう、たとえば、あなたの[保存]ボタンのClickイベントハンドラで)、あなたBindingSourceEndEditメソッドを呼び出す必要があります。これにより、すべての保留中の変更が、達成しようとしていたものとまったく同じ基礎となるデータソースにコミットされます。

詳細については、MSDNのrelevant documentationも参照してください。

+1

ヒントのおかげで、コーディ。 BindSourceの代わりにBindlingListを使用しています(BindSourceがForms名前空間に属しているため、Logicレイヤーを汚染したくありません)。また、私はthis.ActiveControl.DataBindings ["Text"]関数を見つけるために役立ちました。 .WriteValue(); – Jake

+0

@ジェイク:それは理にかなっています。私がそれを投稿した直後に、私はあなたが 'BindingSource'を使用していると仮定していることに気付きました。あなたの質問は、実際にデータバインディングをどのように扱っていたのかを特定していませんでした。私はあなたが必要とする解決策を見つけることができてうれしいです。 –

2

は、あなたがテキストボックスがTextBox.Textに結合したときのデフォルトである(フォーカスを失ったとき、それはときに、プロパティ値の変更を更新の代わりになるようにバインドを変更したい...問題の説明から、WPFのような

サウンズ)。あなたの結合にUpdateSourceTriggerプロパティを設定することでこれを行うことができます。

<TextBox Text="{Binding UpdateSourceTrigger=PropertyChanged}"/> 
+0

ありがとうバブルラップ。それがWPFかどうかは関係ありません。アーキテクチャも同様です。親切に私の編集された投稿を参照してください。あなたの助けに。 – Jake

関連する問題