2012-05-19 3 views
1

WPF 창에 Xaml 패키지 형식을로드하는 서식있는 텍스트 상자가 있으며 문서를 열고 저장하고 닫도록 프로그래밍 할 수있었습니다. 이제 닫는 시간에 내가 닫을 때 저장할지 묻지 않고 메시지 상자를 통해 할 수있었습니다.리치 텍스트 상자 wpf의 변경 내용 비교

서식있는 텍스트 상자가 비어 있거나 사용자가 아무런 수정 작업을하지 않은 경우에도 닫을 때 실행되는 질문이 저장되는 경우에도 문제가 발생합니다.

richtextbox, flowdocument 개체 및 텍스트 범위 개체를 비교하여 마감 시간 데이터와 시작 데이터를 비교하려고 시도했지만 행운을 빈다. 어떻게 비교할 수 있는지 말해 줄 수 있습니까? 변경이 발생했습니다. 서식있는 텍스트 상자의 변경 이벤트를 사용하고 플래그를 사용하면 작업을 해결할 수 있지만 사용자가 변경 사항을 되돌릴 경우 문제가 다시 발생합니다.

감사합니다.

+0

'RichTextBox.ToString()'의 반환 값을 옵션과 비교하고 있습니까? – LPL

+0

하지만 문자열은 모두 Windows.RichtextBox를 전송하기 때문에 여기에 유효하지 않습니다. – surpavan

답변

0

창이 열리면 rtb가 변경되지 않았 음을 나타내는 플래그를 false로 설정하십시오.

richtextbox의 TextChanged 이벤트를 textchanged 이벤트 서브 루틴에서 처리하십시오. rtb가 변경되었는지 또는 true가 아닌지 나타내는 플래그를 설정하십시오.

닫는 시간에 플래그가 true 또는 false인지 확인하십시오.

rtb가 처음로드 될 때 textchange 이벤트가 발생하기 때문에 textchange 서브 루틴이 양식 초기화 중임을 알리는 또 다른 플래그가 필요합니다. 이 초기로드 플래그를 값 true로 양식의 로컬 변수로 초기화하고 forms load 이벤트의 끝에서 false로 설정하십시오.

textchange 루틴에서 먼저 초기로드가 진행 중인지 확인하고, rtb 플래그가 true로 바뀌지 않는지 확인하십시오.

+0

그래, 이미이 질문에이 메서드는 텍스트가 편집되고 사용자가 변경 한 내용을 취소 한 경우 저장을 실행합니다 (예 : 줄을 추가하고 같은 줄을 다시 제거함). – surpavan

0

저장할 Xaml 패키지 및 저장할 Xaml 패키지의 해시를 계산하십시오. 저장하지 않을 경우 저장하십시오. HashAlgorithm.ComputeHash MethodStream 또는 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 
} 
+0

현재 리치 텍스트 상자에서 스트림을 가져 오는 방법은 무엇입니까? – surpavan

+0

RichTextBox의 내용을 저장하는 방법은 무엇입니까? Xaml 패키지 형식은 스트림이나 바이트 배열을 가져 오는 데 사용할 수 있습니까? – LPL

+0

예, 저장/열기 시간 전에 파일 스트림을 가져올 수는 있지만 저장을 요청하기 전에 스트림을 얻는 방법은 임시 파일을 만든 다음 비교할 것을 의미합니까? – surpavan

관련 문제