我搜索了相关问题,却找不到我需要的东西。
我有一个richtextbox控件。当垂直滚动条到达某个位置时(比如向下到底部的90%),我需要触发一个事件。我一直在玩富文本框的事件,但还没找到任何东西。
非常感谢任何帮助。
答案 0 :(得分:2)
您可以处理VScoll
事件以检测垂直滚动并使用功能
private static double GetRichTextBoxScrolPos(RichTextBox textBox)
{
if(textBox1.TextLength == 0) return 0;
var p1 = textBox.GetPositionFromCharIndex(0);
var p2 = textBox.GetPositionFromCharIndex(textBox.TextLength - 1);
int scrollPos = -p1.Y;
int maxScrolPos = p2.Y - p1.Y - textBox.ClientSize.Height;
if(maxScrolPos <= 0) return 0;
double d = 100.0 * (double)scrollPos / (double)maxScrolPos;
if(d < 0) d = 0;
else if(d > 100) d = 100;
return d;
}
确定滚动位置。结果为%(100%=完全滚动到底部)。
重要说明:此功能并非绝对准确,但您可能会发现结果准确无误。可以通过测量底线高度来进一步改进(例如,使用Graphics
对象)。 100%可靠的方法是获取VScrollBar
句柄并使用WinAPI查询其位置,但这将需要更多的工作。