【问题标题】:richTextBox limit of characters?RichTextBox 字符数限制?
【发布时间】:2009-07-16 17:17:14
【问题描述】:

在富文本框中存储大量文本时遇到问题。

我正在尝试读取一个相当大的文本文件(从 90mb 到 450mb 不等),并将我读到的内容放入富文本框中。它在一个简单的程序中工作,但是当我在一个复杂的程序中工作时,我得到一个 OutOfMemory 异常。

需要注意的一点是,当我退出我的简单程序时,我在程序返回 0 之前得到了 OutOfMemory 异常。

这是我的简单程序代码:

    array<String^>^ strArray;
    StreamReader^ sr;
    String^ dummyStr;
    int dummyInt;

        sr = gcnew StreamReader("C:\\testsize.txt");

        while( (dummyStr = sr->ReadLine() )!= nullptr)
        {
            dummyInt++;
        }
        sr->Close();

        sr = gcnew StreamReader("C:\\testsize.txt");
        strArray = gcnew array<String^>( dummyInt );
        for(int i=0; i < strArray->Length; i++)
        {
            strArray[i] = sr->ReadLine();
        }
        richTextBox1->Lines = strArray;

我的项目中有类似的sn-p代码,当我执行richTextBox1->Lines = strArray行时会弹出异常。

我已经阅读了富文本框的文档,它说最大限制是 64KB 的字符,但这在中途是有道理的,因为我可以加载文本,但我猜程序在之后转储它时有问题.

有什么想法吗?我一直在尝试寻找一些没有限制的自定义控件,但到目前为止没有成功。

【问题讨论】:

  • 如果您让我们知道这是什么平台/API,也许可以帮助我使用自定义控件。我对 QT 不熟悉,所以可能是这样?
  • Windows Vista、VS2008、C++下

标签: c++ richtextbox limit character


【解决方案1】:

至于将大量文本转储到富编辑中,这通常会非常缓慢,例如记事本,尝试用它打开一个 2MB 的文件。我认为更高级的文本编辑器处理这些问题的方式是通过“虚拟控件”,我知道这些通常与列表控件一起使用,我也会认为与文本框一起使用。它们的行为/功能基本上与您正常的日常控制相同,但不尝试一次渲染大量文本,它们具有“屏幕空间之外”的虚拟空间。

至于您的内存不足问题...当您尝试将文本转储到其中时,您说错误发生在示例代码的最后一行,我很困惑。您还提到限制是 64KB,所以现在假设您的文件很大,就像您说的那样……您在尝试将超过 64KB 的文本转储到 64KB 的有限框中时遇到错误是有道理的。我错过了什么吗?

编辑我重新阅读了一些问题,我看到了你现在在问什么,所以在这个简单的程序中,当一切加载完成后,当程序退出时,你会得到一个错误。将调试点放入您的析构函数中,并查看此错误发生的确切位置。

编辑 2 现在我知道您使用的是什么系统,我去看了一下,文档比 64K 限制要复杂一些。首先不是指 64 KB,而是指 64000 个字符。另请注意,您可以随意更改此限制。其次,如果您使用 SF_TEXT 而不是 SF_RTF 进行流式传输,则此限制无效,我想这就是 .NET 界面所见背后发生的事情。

【讨论】:

  • 关于内存问题,我提到它是因为在简单的程序中我能够加载代码(即使速度很慢),然后滚动浏览它和所有内容。当我尝试关闭程序时出现异常(就在“return 0;”语句之前)。在更复杂的项目中,当我尝试加载代码时出现异常。我试图指出可以在 64KB 的文本框中加载 90mb 的代码,这就是为什么我很困惑哈哈。
  • 对不起,我在第二次通读时发现了这一点。而且看起来很奇怪...您使用的是什么平台/api?
  • 没有问题。它在 Vista、VS 2008、C++ 下。所以我猜是.NET?
  • 我的示例文件中有 39,000 行,每行包含 10 到 30 个字符,所以我仍然超过了这个限制,哈哈。我尝试按照您的建议进一步研究析构函数,但看不到任何异常。我确实注意到的一件事是,调试时 rtf 和 Text 属性的值字段中都有 OutOfMemory 异常。我的 textLenght 是……9200 万。我猜我必须找到一些可以执行您在第一段中建议的控制,并且希望不必自己做哈哈。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 2012-11-28
  • 2023-03-10
相关资源
最近更新 更多