VisualTextBox Visual Studio中的垂直滚动条操作

时间:2010-06-06 23:47:38

标签: c# richtextbox

我搜索了相关问题,却找不到我需要的东西。

我有一个richtextbox控件。当垂直滚动条到达某个位置时(比如向下到底部的90%),我需要触发一个事件。我一直在玩富文本框的事件,但还没找到任何东西。

非常感谢任何帮助。

1 个答案:

答案 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查询其位置,但这将需要更多的工作。