2014-04-04 83 views
-1

我需要從WPF RichTextBox中獲取所有文本。如何從RichTextBox中獲取WPF中的所有文本

每個人(How to get a WPF rich textbox into a stringRichTextBox (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爲 「\ r \ n」。在一個非常簡單的例子:

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

我得到:

「狗是棕色的貓是黑色\ r \ n」 個

它可以被看作是一個小問題,但我真的需要確切的文字。

  • 你知道爲什麼嗎?
  • 簡單地忽略一個尾隨的「\ r \ n」是否安全?
  • 我的代碼是否正確?
  • 是否還有其他問題(我的意思是真正的文本和我從我的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

相關問題