2012-05-19 30 views
1

WPF窗口具有加載在XAML軟件包格式的格式文本框,我能夠把它的程序打開,保存並關閉文件。現在,在結束的時候,我可以讓用戶在關閉時保存或不保存,我可以通過消息框來完成。RichTextBox的中變化比較WPF

現在的問題是,如果在格式文本框爲空,或者如果用戶沒有做出任何修改,即使這樣的問題在收盤保存火災。

我試圖通過比較richtextbox,flowdocument對象和文本範圍對象來比較開放數據與關閉時間數據,但我確實有任何運氣與他們,請你告訴我如何能得到一個很好的比較/如果有改變發生。如果使用富文本框的更改事件並使用標誌,則可以解決該問題,但如果用戶恢復更改,問題將再次出現。

尋找建議謝謝。

+0

比較'RichTextBox.ToString()'返回一個選項的值嗎? – LPL

+0

但字符串在這裏是無效的,因爲它所做的就是發送Windows.RichtextBox我認爲。我嘗試過使用Equal() – surpavan

回答

0

當窗口打開時,將標誌設置爲false,表明rtb沒有改變。

處理TextChanged事件爲您的RichTextBox,在TextChanged事件子程序設置指示是否RTB已更改或不正確的標誌。

在關閉時檢查標誌以查看它是否爲真或假。

值得注意的是,你還需要另一個標誌讓textchange子程序知道你的形式正在初始化,因爲textchange事件觸發時,RTB初始加載。只需將該初始加載標誌初始化爲值爲true的表單上的局部變量,並在表單加載事件結束時將其設置爲false。

在textchange例行第一次檢查,如果初始加載正在進行中,如果沒有在RTB標誌翻轉爲true。

+0

是的,我已經在問題中說過了,如果編輯文本並撤消了用戶的更改,則此方法將觸發保存,例如添加一行並將其刪除。 – surpavan

0

計算爲保存XAML中包,你要保存的XAML包的哈希值。如果不等於保存。 HashAlgorithm.ComputeHash Method需要StreamByte[]

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 
} 
+0

如何從當前RichText框中獲取流? – surpavan

+0

如何保存RichTextBox的內容? Xaml封裝格式呢,你可以用它來獲取流或字節數組嗎? – LPL

+0

是的,我可以在保存/打開時間之前獲取文件流,但是在請求保存之前如何獲取流,您的意思是創建一個臨時文件然後進行比較? – surpavan