在 C# 中为富文本框分配内存

Posted

技术标签:

【中文标题】在 C# 中为富文本框分配内存【英文标题】:Allocating memory for a rich text box in C# 【发布时间】:2013-09-09 02:19:57 【问题描述】:

我需要将一个文本文件加载到 C# 中的 RichTextBox 中。将文本文件加载到富文本框中应以 C++ 方式完成。

有没有办法将文件加载到富文本框中,就像下面的 C++ 代码一样?

以下 C++ 代码说明:

这里的句柄是VC++文本框句柄,为文本框句柄分配内存。根据分配的内存,将缓冲区中的内容加载到C++中的文本框中。 如何在 C# 中实现这种行为?

C++ 代码:

length = (UINT) file.GetLength();
editHandle = pCEdit->GetHandle();
if (LocalReAlloc(editHandle, length + 1, LHND) == NULL )

      file.Close();
      return SF_MEM_ALLOC_ERROR;


// read file into the editBuffer
file.Read( (editBuffer = 
    (LPSTR) LocalLock(editHandle)), length );
editBuffer[length] = 0;
LocalUnlock( editHandle );
// Write it to the Text box, from the buffer
pCEdit->SetWindowText(A2T(editBuffer));

以上代码没有任何对齐问题。

对于上面的 C++ 代码,我只是使用了下面几行 C# 代码

C# 代码:

    private void button1_Click(object sender, EventArgs e)
    
        string fullPath = "C:\\report.txt";
        richTextBox1.LoadFile(fullPath, RichTextBoxStreamType.PlainText);
    

但是这种在富文本框中加载的方式会导致对齐问题。

我加载的文本文件包含很多空格和制表符。 如何根据加载的文件大小为 C# 中的富文本框分配内存? 用于检查对齐问题。请在下面的链接中找到屏幕截图

C# 代码的输出: (来源:pictureupload.us)

【问题讨论】:

我不确定您为什么需要这样做,对齐问题是什么意思?文本看起来不像文本文件? 说它是一个文本文件,它包含很多标签,空格。 你做对了!也许你的问题不清楚。纯文本可能存在一些未知字符。不确定! 请提供“对齐”问题的截图 Samuel 请检查以下链接以获取屏幕截图。e.pictureupload.us/114559970552285a9a71816.png 【参考方案1】:

我认为可能有不同的选项卡设置(我的意思是一个选项卡的空格数)

【讨论】:

【参考方案2】:

您应该在保存数据时在文件中正确格式化您的字符串。问题是标签大小。正如您已经提到的,您的文件包含与制表符结合的空格。所以不同的标签大小(可能是记事本和 Visual Studio 字符串)是主要问题。

一种可能的补救方法是仅使用制表符以完全格式化的方式(不使用空格)保存您的文件。

如果您在 .NET 中写入文件 see this link to save file。

【讨论】:

【参考方案3】:

感谢大家的投入..

以上 C++ 代码使用 8 位 LPSTR 作为缓冲区。 富文本框的问题是它不支持 Unicode - 8 位字符...它只支持 - 16 位字符

除了富文本框,我们可以使用 Unicode - 8 位的只读模式文本框..

    private void button1_Click(object sender, EventArgs e)
    
        string fullPath = "C:\\report.txt";
        byte[] byteArra = System.IO.File.ReadAllBytes(fullPath);
        textBox1.Text = Encoding.UTF8.GetString(byteArra);
    

【讨论】:

是的,RichTextBoxStreamType.UnicodePlainText【参考方案4】:

使用以下简单的代码——在 Visual C++ 中实现你的结果。它只是将文件传输到 RTB 文本。我为此苦苦挣扎了两天。我通过将你的 C# 代码转换为 C++/CLR 来实现它

String^ fullPath = "C:\\report.txt";
richTBox1->LoadFile(fullPath, RichTextBoxStreamType::PlainText);

【讨论】:

以上是关于在 C# 中为富文本框分配内存的主要内容,如果未能解决你的问题,请参考以下文章

具有语法突出显示的文本框/富文本框? [C#] [关闭]

如何在 C# 的富文本框中将文本添加到用户光标的位置?

C#中,怎么使用富文本框控件显示一个文件的内容

C# - 将大 (150MB) 文本文件读入富文本框

一个关于winform(C#)的富文本框的问题,希望大家能帮帮我,下面我仔细描述下我的需求

如何在 Windows 窗体 C# 中为文本框设置 Scintilla