2011-09-16 21 views
2

フォームデータが閉じられて保存される前に、フォームデータが変更されたかどうかを確認するために、次のC#コードを試しています。フォームデータが変更されたかどうかの確認

//Declare a private variable 
private bool requiresSaving =false; 

//Declare an event 
private void SomethingChanged(object sender, EventArgs e) 
{ 
     requiresSaving = true; 
} 

//Hook up this event to the various changed events, eg 
this.txtNameDepart.TextChanged += new System.EventHandler(this.SomethingChanged); 


//Check this variable when you are closing the form 
private void DepartamentEdit_FormClosing(object sender, FormClosingEventArgs e) 
{ 
if (requiresSaving) 
{ 
    .... 

また、saveDepartメソッドでrequiresSaving falseを設定する必要があります。

+1

あなたの質問は何ですか? – Rhys

+0

requiresSavingが 'True'に設定されている場合は、いくつかのブレークポイントを設定する必要があります。たぶん、簡単にするために、各イベントを独自のイベントハンドラに設定し(すべてをthis.SomethingChangedに設定するのではなく)、すべてのイベントにブレークポイントを設定することができます。変数の設定を参照してください。 –

答えて

0

フラグをtrueに設定したすべての場所を表示する必要があります。

も、このコード:

//Hook up this event to the various changed events, eg 
this.txtNameDepart.TextChanged += new System.EventHandler(this.SomethingChanged) 

もあなたがやろうとしているものを理解、私はあなたがすぐ以降多くのコントロールを持っている場合は、いくつかと、各変更イベントのロジックを処理しますので、これは悪いだと思います個々のコントロールのより具体的なコードは、同じイベントハンドラを一度にすべてのイベントハンドラに添付しないでください。

すべてのコントロールがBindingSourceにバインドされている場合は、別の方法を使用できます。

フォームロード時にビジネスオブジェクトから何らかの割り当てを手動で入力した場合、そのオブジェクトのプロパティと元のオブジェクトのプロパティを比較することもできます(もちろんオリジナルのコピーを保存した場合)。 form_closing。

2

私は、あなたが最初のデータを読み込む前であっても、これらのイベントをフックアップすると思います。その後、SomethingChangedが起動し、ユーザーが何も変更しなくても保存ボタンを有効にします。

デフォルト/既存データをロードするときにこれらのイベントをアンフックするか、デフォルト/既存データをロードした後にこれらのイベントをフックアップすることができます。

//Un-Hook when loading your default/existing data. 
private void SetDefaultData() 
{ 
    this.txtNameDepart.TextChanged -= new System.EventHandler(this.SomethingChanged); 
    this.txtNameDepart = "My default text"; 
    this.txtNameDepart.TextChanged += new System.EventHandler(this.SomethingChanged); 
} 
関連する問題