2014-04-04 1 views
-1

WPF RichTextBox에서 정확히 모든 텍스트를 가져와야합니다.WPF의 RichTextBox에서 모든 텍스트를 가져 오는 방법

모두 (How to get a WPF rich textbox into a string, RichTextBox (WPF) does not have string property "Text", http://msdn.microsoft.com/en-us/library/ms754041(v=vs.110).aspx 그리고 더 많은)이이 같은 코드 동의합니다

public static string GetText(RichTextBox rtb) 
{ 
    TextRange textRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd); 
    string text = textRange.Text; 
    return text; 
} 

을하지만이 trailling을 추가 "\ 연구 \ n". 아주 간단한 경우 :

<RichTextBox x:Name="mRichTextBox"> 
    <FlowDocument> 
    <Section> 
     <Paragraph> 
     <Run Text="The dog is brown. The cat is black."/> 
     </Paragraph> 
    </Section> 
    </FlowDocument> 
</RichTextBox> 

내가 얻을 :

".. 개는 갈색 고양이는 검은 색 \ 연구 \ n"

그것은으로 볼 수있다 사소한 문제는 아니지만 정말로 정확한 텍스트가 필요합니다.

  • 이유를 알고 계십니까?
  • "\ r \ n"하나를 무시하는 것이 안전합니까?
  • 내 코드가 맞습니까?
  • 다른 gotcha가 있습니까 (실제 텍스트와 GetText에서 얻은 것의 차이점)?

감사합니다.

+0

당신이 여러 줄 수 있도록하여 RichTextBox가 필요하십니까 메모장 화면 복사하여 붙여 넣기를? 이 기능을 사용 중지 할 수 있으며 문제가 발생하지 않아야합니다. –

+0

단락이 새 줄로 끝나지 않는다고 생각하십니까? 당신은 진짜 텍스트를 얻고 있습니다. – Paparazzi

+0

return text.TrimEnd() – justsomeguy

답변

0

멀티 라인이 필요하지 않은 경우 사용할 수 없으므로이 문제가 없어야합니다.

또한이처럼 그들을 제거 할 수 있습니다 : 또한

string text = textRange.Text.Replace(Environment.NewLine, ""); 

을 경우에만이 같은 기능을 사용할 수있는 마지막 ocurrence을 제거하려면 :

public static string ReplaceLastOccurrence(string Source, string Find, string Replace) 
{ 
    int Place = Source.LastIndexOf(Find); 
    string result = Source.Remove(Place, Find.Length).Insert(Place, Replace); 
    return result; 
} 

을 그리고 이런 식으로 사용합니다.

string text = ReplaceLastOccurrence(textRange.Text,Environment.NewLine,""); 

당신은 당신이 마지막에 새로운 라인을 얻을, 그래서 당신은 acordingly 그것을 처리되었는지 확인하는이 때마다.

+0

여러 줄짜리 편집이 필요합니다 ("개가 갈색입니다. 고양이는 검정입니다."는 예제 일뿐입니다) 정확한 텍스트가 필요합니다. 가능한 한 "\ r \ n"문자열을 제거하기로 결심했으나 추가 이유와 다른 차이점이 있는지 알아야합니다. – MuiBienCarlota

+0

당신은 을 가지고 있고, 내가 추측 할 때마다 비어 있지 않은 경우 새로운 줄이 생깁니다. –

+0

그리고 Environment.NewLine과 함께이 메소드를 사용해야하며 \ r \ n이 아니라 청소기와 이식성이 있어야합니다. –

0

하지만 실제 텍스트가 나옵니다.
새 행으로 패러 그래프를 끝내야한다고 생각하지 않습니까?

이 시도하고

<RichTextBox x:Name="mRichTextBox"> 
    <FlowDocument> 
     <Section> 
      <Paragraph/> 
      <Paragraph/> 
      <Paragraph> 
       <Run Text="The dog is brown. The cat is black."/> 
      </Paragraph> 
     </Section> 
    </FlowDocument> 
</RichTextBox> 
+0

각 빈 단락이 개행 문자로 내보내졌지만 마지막 비어 있지 않은 단락이 왜 후행 NewLine을 생성하는지 이해하지 못합니다. 각 텍스트 편집기 (메모장, Word, Visual Studio 및 기타)에서 텍스트를 끝내는 것과 새 줄을 사용하지 않고 텍스트를 끝내는 것의 차이점이 있습니다. 줄 바꿈이 강제되면 제거 할 수 있지만 유일한 차이점이 있는지 알아야합니다. – MuiBienCarlota

+0

그리고 빈 줄이 아닌 단락이 새 줄로 끝나는 것을 보았습니다. 여기에 패턴을보기 시작 했습니까? – Paparazzi

+0

GetText로 설정된 텍스트를 설정 한 후에 정확히 같은 내용을 유지할 수 있어야합니다. 다음 SetText를 사용합니다 : 'public static void SetText (RichTextBox rtb, string text) { \t TextRange textRange = new TextRange (rtb.Document.ContentStart, rtb.Document.ContentEnd); \t textRange.Text = text; }' "\ r \ n"을 하나도 지우지 않으면 각 SetText (GetText())가 번거롭고 새로운 빈 단락이 생깁니다. 하지만 입력 된 텍스트와 내가 얻은 결과간에 다른 차이점이 있는지 알아야합니다. – MuiBienCarlota