RichTextBox格式化和恢复光标和滚动条位置

时间:2013-12-23 15:16:23

标签: c# winforms

我有RichTextBox格式化文本,我有多种文字选择和格式。

因此,格式化完成后,RichTextBox的滚动条位置不一样。

如何保存和恢复滚动条位置相同( easy )方式,因为我可以保存光标位置?

protected override void OnTextChanged(EventArgs e)
{
  // Save cursor position
  int cursor_position = this.SelectionStart;

  // Format text
  Highlight();

  // Restore position
  this.SelectionLength = 0;
  this.SelectionStart = cursor_position;
}

1 个答案:

答案 0 :(得分:1)

我在这里看到很多帖子通过处理滚动消息来解决这个问题。

我已经采用了这种简单的方式,所以如果有人遇到同样的问题,你可以用这种方式。它并不完美(如果顶部显示一半的线条,它会滚动),但我认为足够了:)。

protected override void OnTextChanged(EventArgs e)
{
    // Get first and last displayed character
    int start = this.GetCharIndexFromPosition(new Point(0, 0));
    int end = this.GetCharIndexFromPosition(new Point(this.ClientSize.Width, this.ClientSize.Height));

    // Save cursor position
    int cursor_position = this.SelectionStart;
    int cursor_lenght = this.SelectionLength;

    // Your formatting
    Highlight();

    // Scroll to the last character and then to the first + line width
    this.SelectionLength = 0;
    this.SelectionStart = end;
    this.ScrollToCaret();
    this.SelectionStart = start + this.Lines[this.GetLineFromCharIndex(start)].Length+1;
    this.ScrollToCaret();

    // Finally, set cursor to original position
    this.SelectionStart = cursor_position;
}