2015-06-08 21 views
3

我有RichTextBox就像「控制檯」。在'cmd'中,我顯示來自SSH連接的數據,並且還允許在'cmd'RichTextBox中寫入內容。如何獲取用戶在RichTextBox中編寫的文本的文本範圍

public void ConnectTTY() 
    { 
     NewTerminal = new TTY(HostBox.Text, "", LoginBox.Text, PasswordBox.Text); 

     Thread.Sleep(1000); 

     ReadStreamAsync(NewTerminal.reader, cmd); 

     // cmd is my RichTextBox . At first I am filling it with data from server 
     // and in next step I am allowing user to write some command 
     cmd.Focus(); 


     cmd.CaretPosition = cmd.Document.ContentEnd; 
     cmd.ScrollToEnd(); 

     LastChar = cmd.Document.ContentEnd ; 
    } 

在最後一個行我使用TextPointer「LastChar」拿到最後添加內容的位置,因爲我想獲得什麼樣的用戶會在RichTextBox中寫。

在使用ReWriteStream獲取最後文本並通過SSH發送的「Enter」事件I上。

public void ReWriteStream() 
    { 

     string myText = new TextRange(LastChar, cmd.Document.ContentEnd).Text ; 


     MessageBox.Show("Tekst: " + myText.ToString() ); 

     if (myText.Length != 0) 
     { 
      WriteStreamAsync(myText, NewTerminal.writer, NewTerminal.stream); 
      ReadStreamAsync(NewTerminal.reader, cmd); 

      //WriteStream(myText, NewTerminal.writer, NewTerminal.stream); 
      //Thread.Sleep(1000); 
      //ReadStream(NewTerminal.reader, cmd); 


     } 
     cmd.Focus(); 

    } 

但是每次我的變量myText都是空的。

string myText = new TextRange(LastChar, cmd.Document.ContentEnd).Text ; 

我應該如何獲得任何文本,在LastChar位置後寫入我的RichTextBox中?

感謝您的幫助, 最好的問候, Wiktor的

編輯:我已經把串入RichTextBox的分析插入符的位置:

public void ConnectTTY() 
    { 
     NewTerminal = new TTY(HostBox.Text, "", LoginBox.Text, PasswordBox.Text); 

     Thread.Sleep(1000); 

     ReadStreamAsync(NewTerminal.reader, cmd); 



     cmd.Focus(); 


     cmd.CaretPosition = cmd.Document.ContentEnd; 
     cmd.ScrollToEnd(); 

     cmd.CaretPosition.InsertTextInRun("|1|"); 

     // LastChar = cmd.CaretPosition.DocumentEnd; 

    } 

這裏:

public void ReWriteStream() 
    { 
     string caret; 
     string myText; 



     LastChar = cmd.CaretPosition.DocumentEnd.GetInsertionPosition(LogicalDirection.Backward); 

     cmd.CaretPosition.InsertTextInRun("|2|"); 

     myText = new TextRange(LastChar, cmd.CaretPosition.DocumentEnd).Text; 
     // myText = new TextRange(LastChar, cmd.Document.ContentEnd).Text; 

     MessageBox.Show("Text : " + myText.ToString() ); 

     if (myText.Length != 0) 
     { 
      WriteStreamAsync(myText, NewTerminal.writer, NewTerminal.stream); 
      ReadStreamAsync(NewTerminal.reader, cmd); 

      //WriteStream(myText, NewTerminal.writer, NewTerminal.stream); 
      //Thread.Sleep(1000); 
      //ReadStream(NewTerminal.reader, cmd); 


     } 
     cmd.Focus(); 

    } 

我得到它應該在cmd RichTextBox: 「 你有郵件。 -bash-3.2 $ | 1 | ls -l | 2 |

+0

什麼類型的對象是LastChar?的TextPointer?或者? –

+0

是的,這是TextPointer。 – Wiktor

+0

它是TextPointer,我只在ConnectTTY()中修改以獲取ContentEnd最後一個「自動」插入文本的位置到RichTextBox中。 – Wiktor

回答

1

另一種方法是抓住最後的插入位置,然後使用該文本範圍。

public void ReWriteStream() 
{ 
    var myText = new TextRange(rtb.CaretPosition.GetLineStartPosition(0), rtb.CaretPosition.GetLineStartPosition(1) ?? rtb.CaretPosition.DocumentEnd).Text;  
    ... 

} 
+0

謝謝你的回答,不幸的是它沒有幫助 – Wiktor

+0

如果我使用類似這樣的東西: 'string myText = new TextRange(rtb.Document.ContentStart,rtb.Document.ContentEnd).Text;' 我可以得到整個文本也是由用戶插入的文本。 – Wiktor

+0

我也嘗試過使用DocumentEnd,就像你寫的。 – Wiktor

相關問題