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

时间:2013-09-05 09:51:41

标签: c# c++ visual-c++ c#-3.0

我需要在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);
    }

但是,在Rich Text框中加载这种方式会导致对齐问题。

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

C#代码的输出: http://e.pictureupload.us/114559970552285a9a71816.png

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您应该在保存数据的同时在文件中正确格式化字符串。问题是标签尺寸。正如您已经提到的,您的文件在包含选项卡的组合中包含空格。因此,不同的标签大小(可能是记事本和视觉工作室字符串)是主要问题。

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

如果您使用.NET see this link to save file编写文件。

答案 2 :(得分:0)

感谢大家的投入..

以上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);
    }

答案 3 :(得分:0)

使用以下简单代码 - 在Visual C ++中实现您的结果。它只是将文件传输到RTB文本。我已经为此奋斗了两天。我通过将您的C#代码转换为C ++ / CLR来实现它/ p>

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