【问题标题】:Why is text disappearing in RichTextBox?为什么 RichTextBox 中的文本消失了?
【发布时间】:2013-02-27 18:07:24
【问题描述】:

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

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

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

我遇到的问题是当记录非常长时,ascii 端超过 3500 个字符使得十六进制端非常大,我发现当右边距变得太大。比如:

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

【问题讨论】:

  • 你能说缺少哪些字符吗?我的意思是删除的字符实际上是回车、空格、空字符等,实际上是显示为 ASCII 吗?
  • 你也有水平滚动条吗?
  • 是的,我有一个水平滚动条。它们都是可打印的字符,所以它们不是回车、空值或任何东西。据我所知,正在发生的事情是字符的像素不存在。意思是,它会显示 2 的一半,但不会显示另一半。然后该行的其余部分也将是空白的。我将单击显示的一半数字,更多的行将重新出现。这是我所看到的没有显示的像素。

标签: c# winforms


【解决方案1】:

对于遇到同样问题的人,我找到了解决此问题的方法。

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

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

代码可以从:http://scintillanet.codeplex.com/下载

希望这可以帮助遇到我遇到同样问题的其他人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2023-04-03
    相关资源
    最近更新 更多