如何获取用户在 RichTextBox 中编写的文本的 TextRange
How to get TextRange of text written by user in RichTextBox
我有 RichTextBox,它类似于 "console"。在 '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 中写入的内容。
在 "Enter" 事件中,我使用 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 ;
我应该如何获取在 LastChar 位置之后写在我的 RichTextBox 中的任何文本?
感谢您的帮助,
最好的祝福,
维克托
编辑:我已将字符串放入 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;
...
}
我有 RichTextBox,它类似于 "console"。在 '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 中写入的内容。
在 "Enter" 事件中,我使用 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 ;
我应该如何获取在 LastChar 位置之后写在我的 RichTextBox 中的任何文本?
感谢您的帮助, 最好的祝福, 维克托
编辑:我已将字符串放入 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;
...
}