1

WPFウィンドウにはXamlパッケージ形式をロードするリッチテキストボックスがあり、ドキュメントを開いたり、保存したり、閉じたりするようにプログラムすることができました。さて、クロージング時に、クロージング中にユーザーに保存するかどうかを尋ねることができ、メッセージボックスを介してそれを行うことができました。

問題は、リッチテキストボックスが空の場合、またはユーザーがそれを変更していない場合でも、保存するための質問が閉じたときに発生することです。

リッチテキストボックス、フロードキュメントオブジェクト、テキスト範囲オブジェクトを比較して、開始データと終了時間データを比較しようとしましたが、運が良かったので、どのようにして適切な比較を行うことができるか/変更が発生したかどうかを教えてください。リッチテキストボックスの変更イベントを使用してフラグを使用すると、作業は解決できますが、ユーザーが変更を元に戻すと、問題が再び発生します。

アドバイスを探していただきありがとうございます。

4

2 に答える 2

0

保存した Xaml パッケージと保存する Xaml パッケージのハッシュを計算します。等しくない場合は保存します。HashAlgorithm.ComputeHash メソッドStreamまたはを受け取りますByte[]

byte[] oldHashcode = MD5CryptoServiceProvider.Create().ComputeHash( Stream or byte[] );
byte[] newHashcode = MD5CryptoServiceProvider.Create().ComputeHash( Stream or byte[] );

if (!newHashcode.SequenceEqual(oldHashcode))
{
    ask the user to save
}
于 2012-05-20T11:25:14.953 に答える
0

ウィンドウが開いたときにフラグをfalseに設定して、rtbが変更されていないことを示します。

リッチテキスト ボックスの TextChanged イベントを処理します。textchanged イベント サブルーチンで、rtb が変更されたかどうかを示すフラグを true に設定します。

終了時にフラグをチェックして、それが真か偽かを確認します。

rtb が最初に読み込まれるときに textchange イベントが発生するため、フォームが初期化されていることを textchange サブルーチンに知らせる別のフラグも必要になることに注意してください。この初期ロード フラグをフォームのローカル変数として true の値で初期化し、フォーム ロード イベントの最後で false に設定します。

textchange ルーチンでは、最初に初期ロードが進行中かどうかを確認し、そうでない場合は rtb フラグを true に切り替えません。

于 2012-05-19T21:49:40.377 に答える