2010-09-08 54 views
1

我正在使用串口数据将文本写入多行文本框。目前它将每行都写入上一行的下方,因此最终的最新文本行不在屏幕上,用户必须向下滚动才能查看它们。我如何更改代码,以便在上面的每行中写入,而不是在上一行文本的下面?我正在使用VS2008中的C#开发Windows Mobile 6设备的程序。我知道这可能是一个简单的解决方案,但我是C#的新手,似乎无法弄清楚我在做什么。提前致谢!在多行文本框中降序文本(精简框架,C#)

更新:

这是最接近于我试图完成:

private void terminalText(object o, EventArgs e) 
    { 
     tbTerminal.Text += rawString; 
     tbTerminal.Select(tbTerminal.TextLength, 0); 
     tbTerminal.ScrollToCaret(); 
    } 

它不写上一行上面下一行,因为我希望,但自动对焦最新的书面文本,因此您不必使用滚动条查看最新的端口数据。我感谢所有的帮助!

回答

1

你总是可以选择最后一个字符,然后滚动到插入符号,我也不太清楚,如果它与紧凑的框架有什么不同,但与普通的文本框控件:

textBox.Select(textBox.TextLength, 0); 
textBox.ScrollToCaret(); 
+0

谢谢!这不是我想要的,但它绝对是一种替代解决方案。非常感谢! – ninehundredt 2010-09-08 22:15:45

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(); 
     } 

这对于以合理的频率接收的合理数量的文本来说很好。如果您开始使用大块文本或大量更新,则可能需要进一步优化。

+0

你不需要空字符串检查,因为你可以简单地做我在我的回答中所说的(也就是不带走1),并且如果文本框的文本字段为空,它将滚动到结尾,而不是错误(因为它将变为0) – Blam 2010-09-08 21:08:47

+0

谢谢,@Blam,我会看看是否让我简化了我的代码。 – 2010-09-08 23:32:15

+0

这实际上是我所理解的问题是寻找..(第一个选项) – Vic 2013-09-12 08:00:14