保持RichTextBox中的文本位置,同时分别添加和删除文本到结尾和开头

时间:2013-01-17 20:00:10

标签: winforms c#-2.0

我有一个非常简单的表单,其中包含RichTextBox字段。它充当原始日志文件查看器。当日志数据添加到文件时,我将新数据附加到文本框。这很好但我想阻止文本框在添加新数据时滚动,以便可以读取当前可见的数据。我试验了一段时间,最终我必须调用本地SendEvent函数来获取和设置附加文本之前和之后的滚动位置。这也很有效,但是,我现在遇到了一个新问题:随着时间的推移,日志文件会变得非常大并且使用大量内存来保存日志文件的全部内容。因此,如果文本大小达到某个阈值,我现在所做的就是通过从开头删除文本来限制文本框中的文本量。

所以现在我的问题是我可以保持滚动位置,但是文本会改变,因为我从头开始删除文本。是否有一种简单的方法来更改滚动位置以保持可读性(显然,如果用户正在阅读文本框的第一行并且已删除,那么没有什么可以做,但我认为这是可以接受的)?

这是一个例子:说我的阈值是文本框中的1MB文本。如果当前有1MB的文本,我需要追加1000个字符,那么我还需要从头开始删除1000个字符。如果我滚动到文本的中间,那么我可以在删除和附加文本之后保持滚动位置,但现在我正在阅读的文本更进一步。

也许我需要重新考虑一下我的方法?

1 个答案:

答案 0 :(得分:0)

我意识到在用户查看文本时修改文本并没有多大意义。所以我决定在这个表单中添加一个选项来“冻结”文本框的更新。冻结时,不会添加或删除任何文本,用户可以自由滚动。解冻所有追加/删除工作正常。