C# 如何在RichTextBox中获取用户写入的文本的TextRange

C# 如何在RichTextBox中获取用户写入的文本的TextRange,c#,wpf,richtextbox,textrange,C#,Wpf,Richtextbox,Textrange,我有一个类似“控制台”的RichTextBox。在'cmd'中,我显示了来自SSH连接的数据,还允许在'cmd'RichTextBox中写入内容 public void ConnectTTY() { NewTerminal = new TTY(HostBox.Text, "", LoginBox.Text, PasswordBox.Text); Thread.Sleep(1000); ReadStreamAsync(NewTermina

我有一个类似“控制台”的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 ;
    }
在最后几行中,我使用文本指针“LastChar”获取最后添加内容的位置,因为我想获取用户将在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 ;
    }
在“输入”事件时,我使用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 |

另一种方法是获取最后一个插入位置,然后将其用于文本范围

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

}

LastChar是什么类型的对象?文本指针?或者?是的,它是TextPointer。我只在ConnectTTY()中修改它,以将最后一个“自动”插入的文本的ContentEnd位置获取到cmd RichTextBox中。感谢您的回答,不幸的是,它没有帮助。如果我使用这样的内容:`string myText=new TextRange(rtb.Document.ContentStart,rtb.Document.ContentEnd).Text;`我还可以获得用户插入的文本的完整文本。再次感谢您花时间解决我的问题,但这同样没有帮助。我当然尝试过:LastChar=rtb.CaretPosition.DocumentEnd.GetInsertionPosition(LogicalDirection.Backward);还有LastChar=rtb.Document.ContentEnd.GetInsertionPosition(LogicalDirection.Backward);请看我的第一篇文章,我插入了字符串“| 1 |”和“| 2 |”。用户“ls-l”插入的文本正是它应该插入的位置。我不知道为什么我不能在myText变量中获取它。