Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较Richtextbox wpf中的更改_Wpf_Vb.net_Compare_Richtextbox - Fatal编程技术网

比较Richtextbox wpf中的更改

比较Richtextbox wpf中的更改,wpf,vb.net,compare,richtextbox,Wpf,Vb.net,Compare,Richtextbox,WPF窗口有一个加载Xaml包格式的富文本框,我可以对其进行编程以打开、保存和关闭文档。现在,在关闭时,我可以要求用户在关闭时保存或不保存,我可以通过一个消息框这样做 现在的问题是,如果富文本框是空的,或者如果用户没有对其进行任何修改,那么在关闭时保存的问题仍然存在 我试图通过比较richtextbox、flowdocument对象和文本范围对象来比较开始时间数据和结束时间数据,但我确实很幸运,您能告诉我如何进行良好比较/如果发生任何更改。如果使用富文本框的更改事件并使用标志,则可以解决工作,但

WPF窗口有一个加载Xaml包格式的富文本框,我可以对其进行编程以打开、保存和关闭文档。现在,在关闭时,我可以要求用户在关闭时保存或不保存,我可以通过一个消息框这样做

现在的问题是,如果富文本框是空的,或者如果用户没有对其进行任何修改,那么在关闭时保存的问题仍然存在

我试图通过比较richtextbox、flowdocument对象和文本范围对象来比较开始时间数据和结束时间数据,但我确实很幸运,您能告诉我如何进行良好比较/如果发生任何更改。如果使用富文本框的更改事件并使用标志,则可以解决工作,但如果用户恢复更改,则问题再次出现


正在寻求建议,谢谢。

当窗口打开时,将标志设置为false,以指示rtb未更改

处理richtextbox的TextChanged事件,在TextChanged事件子例程中,将指示rtb是否已更改的标志设置为true

关闭时,检查标志是否正确

需要注意的是,您还需要另一个标志来让textchange子例程知道表单正在初始化,因为textchange事件在rtb最初加载时触发。只需将此初始加载标志初始化为表单上的局部变量,值为true,并在forms load事件结束时将其设置为false


在textchange例程中,首先检查初始加载是否正在进行,如果正在进行,请不要将rtb标志翻转为true。

为保存的Xaml包和要保存的Xaml包计算哈希值。如果不相等,则保存。获取
字节[]

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
}

是的,我在问题中已经说过,如果用户编辑文本并撤消更改,此方法将触发save,例如添加一行并将其删除。比较
RichTextBox.ToString()的返回值是否是一个选项?但是to string在这里无效,因为它所做的只是发送Windows.RichTextBox。我用Equal()尝试了如何从当前RichTextBox获取流?如何保存RichTextBox的内容?关于Xaml包格式,您可以使用它来获取流或字节数组吗?是的,我可以在保存/打开时间之前获取文件流,但是在请求保存之前如何获取流,您的意思是创建一个临时文件然后进行比较吗?它不是临时文件。例如,只创建一个MemoryStream,然后将散列与开放流中的散列进行比较,询问用户是否确认将MemoryStream保存到文件。我现在按照你说的做了测试,但是结果不可靠,我有时会弄错。非常感谢。