我正在使用RichTextBoxes
在c#中创建一个平面文件阅读器(如果你愿意,可以使用简单的十六进制编辑器)。一个RTB显示十六进制值,另一个显示ASCII值。
我的计划是每行显示一条'记录'。因此,如果我想要查看长度为1000的10条记录,则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
中,它会显示文本的第一部分,直到我开始向所有文本完全停止显示的中间滚动。如果我设法点击记录的这些空白部分,文本将显示,但滚动后再次消失。
我无法弄清楚发生了什么。只有当RightMargin设置为一个非常大的数字时,才会发生这种情况。数字越小,所有文字都会显示没有问题。
有没有人遇到过这样的事情?
如果它有帮助,这是一个代码示例。
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();
答案 0 :(得分:0)
对于那些遇到同样问题的人,我找到了解决这个问题的方法。
我找到了另一个名为ScintillaNET的控件,而不是使用RichTextBox。到目前为止,我已经能够将我的大部分代码切换到使用此控件而没有任何问题。一些函数略有不同,例如,而不是hextTextBox.Clear()它是hexTextBox.ResetText(),或者hexTextBox.SelectionStart现在是hexTextBox.Selection.Start。
微小的差异但是这个控件解决了当记录长度变得非常大时像素消失的问题。
可以从以下网址下载代码:http://scintillanet.codeplex.com/
希望这可以帮助遇到同样问题的其他人。