我正在使用来自串口的数据将文本写入多行文本框。目前,它将每个新行写入上一行下方,因此最终最新的文本行不在屏幕上,用户必须向下滚动才能查看它们。如何更改代码以便将每个新行写在上面而不是在上一行文本下面?我正在使用VS2008中的C#为Windows Mobile 6设备开发程序。我知道这可能是一个简单的解决方案,但我是C#的新手,似乎无法弄清楚我在做什么。提前谢谢!
更新
这是我最接近我想要完成的事情:
private void terminalText(object o, EventArgs e)
{
tbTerminal.Text += rawString;
tbTerminal.Select(tbTerminal.TextLength, 0);
tbTerminal.ScrollToCaret();
}
它不会像我希望的那样在上一行上面写下一行,但它会自动聚焦最新的书面文本,因此您不必使用滚动条来查看最新的端口数据。我感谢所有的帮助!
答案 0 :(得分:1)
我认为你应该能够在所有之前的文本前插入新的文本行,如下所示:
field.Text = receivedLine + "\r\n" + field.Text
另一种选择是始终将文本添加到最后,只需将文本字段滚动到结尾:
field.Text += receivedLine + "\r\n"
var isNotEmpty = field.TextLength > 0;
if (isNotEmpty)
{
field.Select(field.TextLength - 1, 0);
field.ScrollToCaret();
}
对于以合理频率接收的合理数量的文本,这是合适的。如果您开始使用大量文本或大量更新,则可能需要进一步优化。
答案 1 :(得分:1)
你总是可以选择最后一个字符,然后滚动到插入符号,我不太确定它是否与紧凑框架有任何不同,但是使用常规文本框控件:
textBox.Select(textBox.TextLength, 0);
textBox.ScrollToCaret();