我有一个标签,它根据 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 以禁用上述功能,但是在搜索了许多文档后,我找不到任何好的文档。
我希望有一个关于如何禁用平滑滚动功能的尽可能详细的解决方案。谢谢。