我有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;
}
答案 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;
}