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

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

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

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

4

4 回答 4

0

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

于 2013-09-05T11:50:13.800 回答
0

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

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

如果您在 .NET 中编写文件,请参阅此链接以保存文件

于 2013-09-05T12:02:30.433 回答
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);
    }
于 2013-09-06T05:02:23.240 回答
0

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

String^ fullPath = "C:\\report.txt";
richTBox1->LoadFile(fullPath, RichTextBoxStreamType::PlainText);
于 2013-10-24T10:35:42.177 回答