【发布时间】:2009-07-21 13:35:52
【问题描述】:
是否有类似 TextBox 的 WinForms 控件可以在只读模式下显示大量文本(数百兆字节)?当然,它应该可以在不一次将整个文件加载到内存的情况下工作。
我正在尝试自己实现这一点,使用标准的 TextBox,处理滚动和键盘事件,并读取填充可见“窗口”所需的文本量。但它仍然很麻烦,我觉得我在重新发明轮子。
【问题讨论】:
标签: c# winforms text large-files viewer
是否有类似 TextBox 的 WinForms 控件可以在只读模式下显示大量文本(数百兆字节)?当然,它应该可以在不一次将整个文件加载到内存的情况下工作。
我正在尝试自己实现这一点,使用标准的 TextBox,处理滚动和键盘事件,并读取填充可见“窗口”所需的文本量。但它仍然很麻烦,我觉得我在重新发明轮子。
【问题讨论】:
标签: c# winforms text large-files viewer
将“数百兆字节”的文本加载到控件中听起来像是一个非常非常糟糕的主意,内存/性能明智;它可能会使您的程序崩溃。无论如何,您将如何阅读所有这些数百万行?你真的需要整个文本吗?也许,如果您有一个缓冲区并将少量文本加载到RichTextBox 中,并且当您到达末尾(甚至接近末尾)时,只需加载接下来的 100 行(或任何其他数量)会更好。或者,如果您正在搜索某些内容,请搜索您的关键字并将相关文本放入RichTextBox。这真的取决于你打算做什么。
【讨论】:
我认为使用Scintilla 或其包装器Scintilla.Net 可以获得最佳机会。我认为它并没有那么完美,但它比TextBox 或RichtTextBox 要好得多。
【讨论】:
我不知道这样的控件(当您将单个维基百科页面放入 RichTextBox 时会很慢,所以我很确定他会将所有内容都加载到内存中)。
我对 winforms 的体验是,您经常需要自定义默认控件以获得您想要的行为,即使它看起来微不足道(任何人都可以为空 DateTime ?)。另一方面,它们确实提供了一个很好的基础,可以快速添加一个或两个简单的行为,而不必自己做所有事情。
几个月来我一直在使用 winforms 控件,并且经常在我自己的控件中实现特定的(一些微不足道的,另一些复杂的)行为。
【讨论】:
据我所知,没有这样的控制。很久以前我写过类似的控件,但它是针对Delphi的,但原理是一样的(读取有限的数据块并渲染它)。所以如果你决定自己实现它,然后远离TextBox控件,它就不太适合这种需求。我相信您应该使用所有自定义绘画创建新的 Control 后代。这不是很容易,但这是唯一正确的方法。
【讨论】:
分部分显示文本.....每个文本框中有 10.000 个字符....我最近发现如果您将文本框变大,程序在编辑文本或滚动时运行速度会更快...
【讨论】: