为什么文本消失在RichTextBox

本文关键字:RichTextBox 消失 文本 为什么 | 更新日期: 2023-09-27 18:01:30

我正在使用RichTextBoxes在c#中创建一个平面文件阅读器(简单的十六进制编辑器)。一个RTB显示十六进制值,另一个显示ASCII值。

我的计划是每行显示一个"记录"。因此,如果有10条记录,我想要查看长度为1000的记录,则ASCII中每行有10行1000个字符,十六进制侧的长度为3000。

我动态地将rtb.RightMargin属性设置为一条记录的长度。

我遇到的问题是,当记录非常长,超过3500个字符的ascii侧使得十六进制侧非常大,我发现文本开始消失在记录的中间和结束时,右边距变得太大。例如:

 hexRtb.RightMargin = 7500 //This is because it's triple the size of the ascii text.

hex rtb中,它将显示文本的第一部分,直到我开始向中间滚动,所有文本完全停止显示。如果我设法点击记录的这些空部分,文本将显示,但在滚动后再次消失。

我不知道发生了什么事。这似乎只发生在右距设置为一个令人难以置信的大数字时。较小的数字,所有的文本将显示没有问题。

有人遇到过这样的事情吗?

如果有帮助,这里有一个代码示例。

int asciiRecordLength = mHexReader.RecordSize;
int hexRecordLength = mHexReader.RecordSize * HexByte; //This is to convert the ascii record length to a hex record length
asciiTextBox.RightMargin = TextRenderer.MeasureText(mHexReader.GetAsciiValues().Substring(0, asciiRecordLength), asciiTextBox.Font).Width;
hexTextBox.RightMargin = TextRenderer.MeasureText(mHexReader.GetHexValues().Substring(0, hexRecordLength), hexTextBox.Font).Width;
//Populate text boxes
hexTextBox.Text += mHexReader.GetHexValues(); //This gets all of the records to be read
asciiTextBox.Text += mHexReader.GetAsciiValues();

为什么文本消失在RichTextBox

对于那些遇到同样问题的人,我找到了一个解决这个问题的方法。

而不是使用RichTextBox,我发现另一个控件,你可以下载称为ScintillaNET。到目前为止,我已经能够切换我的大部分代码来使用这个控件,没有任何问题。有些函数略有不同,例如,不是hextTextBox.Clear(),而是hexTextBox. resettext()或hexTextBox。SelectionStart现在是hexTextBox.Selection.Start。

细微的差异,但这个控件修复了当记录长度变得非常大时像素消失的问题。

代码可从:http://scintillanet.codeplex.com/

下载