我有一个标签,基于RichTextBox上的文本对行号进行标记。我已经钩住了Vscroll事件来处理标记。
private void rtbLogicCode_VScroll(object sender, EventArgs e)
{
Point pt = new Point(0, 1);
int firstIndex = rtbLogicCode.GetCharIndexFromPosition(pt);
int firstLine = rtbLogicCode.GetLineFromCharIndex(firstIndex);
pt.X = ClientRectangle.Width;
pt.Y = ClientRectangle.Height;
int lastIndex = rtbLogicCode.GetCharIndexFromPosition(pt);
int lastLine = rtbLogicCode.GetLineFromCharIndex(lastIndex);
// Small correction
if (rtbLogicCode.Text.EndsWith("\n"))
lastLine++;
labelLogicCode.ResetText();
LabelLineNum(firstLine+1,lastLine);
}
#endregion
private void LabelLineNum(int startNum, int lastNum)
{
labelLogicCode.Font = UIConstant.DDCLogicCodeFont;
for (int i = startNum; i < lastNum; i++)
{
labelLogicCode.Text += i + Environment.NewLine;
}
}
除了RichTextBox使用平滑滚动功能外,一切似乎都正常工作。在许多情况下,用户没有滚动到下一行,导致我的行号计数出现问题。这会导致行号与RichTextBox上显示的实际文本不同步。
最终,我需要禁用平滑滚动功能才能完成此操作。有人告诉我可以覆盖RichTextBox的postMessage API以禁用该功能,但是在搜索了许多文档后,我找不到任何好的解决方案。
我希望能够提供尽可能详细的解决方案来禁用平滑滚动功能。谢谢。