在 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# 中为富文本框分配内存的主要内容,如果未能解决你的问题,请参考以下文章