У меня есть RichTextBox, который похож на «консоль». В «cmd» я отображаю данные из SSH-соединения, а также разрешаю что-то писать в «cmd» 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.
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 ;
Как мне получить любой текст, написанный в моем RichTextBox после позиции LastChar?
Спасибо за любую помощь, С уважением, Виктор
изменить: я поместил строку в 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|"