1

データベースからデータを取得した後、[更新]ボタンをクリックすると、[変更が完了しました。続行しますか]というメッセージボックスが表示され、[はい]/[いいえ]ボタンが表示されます。ただし、変更を加えた場合にのみメッセージボックスを表示したいと思います。変更を加えなかった場合は発生しません。テキストボックスとcomboxの変更を知る方法を教えてください。私のレイズコードは

DialogResult result = MessageBox.Show("Chanes has done, Do you wish to save changes.?", "Message",MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
// HERE MY UPDATE CODE.
}
4

2 に答える 2

2

オプション1:メッセージを表示する前に、古い値と新しい値を比較します。

オプション2:フォームにダーティなメンバー変数を追加し、登録してすべてのサブコントロールのイベントを変更します。
イベントハンドラーの場合:値が変更されているかどうかを確認します。その場合、 dirtyをtrueに 設定します。

オプション3:(私のお気に入りです。)これらのチェックを維持するのは難しすぎるため、チェックを行わないでください。データ構造またはサブコントロールを変更するたびに、チェックを変更する必要があります。
メッセージから「変更が完了しました」を削除するだけです。ユーザーは、自分のデータが本当に変更されたかどうかを自分で知っています。したがって、「変更を保存しますか?」と尋ねるだけです。

于 2012-11-26T12:30:45.340 に答える
0

元の値を文字列として保存してから、結果の値と比較する必要があります。

または、より単純な実装isDirtyでは、テキストボックスの変更イベントでブールフラグをtrueに設定し、更新が成功するとfalseにリセットすることもできます。

必要なものを強調するのに役立つサンプルコードを以下に示します。

if(ValuesHaveChanged())
{
    DialogResult result = MessageBox.Show("Data has been changed, do you wish to save changes?", "Save Changes",MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (result == DialogResult.Yes)
    {
        // HERE MY UPDATE CODE.
        ResetChangeDetection();
    }
}

private bool ValuesHaveChanged()
{
    return this.isDirty;
    /*
    return ! 
    (
        this.savedName.Equals(NameTextbox.Text)
        && this.savedAddress.Equals(AddressTextbox.Text)
    )
    */
}

private void ResetChangeDetection()
{
    this.isDirty = false;
    //this.savedName = NameTextbox.Text;
    //this.savedAddress = AddressTextbox.Text;
}
于 2012-11-26T12:29:47.277 に答える