如何在.NET中实现平滑滚动

时间:2011-03-31 22:02:42

标签: c# .net winforms scroll smooth-scrolling

我想在C#中为自定义控件实现平滑/动画滚动。我想要类似于以下javascript示例:

http://www.kryogenix.org/code/browser/smoothscroll/#p0

我的第一个想法是将滚动条移动到目标点,但在中间点停止。例如,这是一个非常简化的想法:

public void SetSrollValue(int x)
{
    // assume right scrolling
    float step = x / 10;

    while (scroll.Value < x)
    {
        scroll.Value += step;
    }
}

我的问题是:

  • 我应该在一个帖子中实现吗?
  • 这是否会被平滑地绘制(如果我在控制中激活了双缓冲区,我想是的)

所以,如果您知道任何好的示例,文章,指南或类似内容,请在此处提供链接吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

要制作控件滚动的内容,请将AutoScrollPosition的值传递给e.Graphics.TranslateTransform()。这是你的角度,改变你传递的价值。

编写一个小助手类,使用您在OnPaint方法中调用的方法观察控件的AutoScrollPosition的值,传递e.Graphics,以便调用其TranslateTransform方法。当你看到它改变时,记录Environment.TickCount,设置一个内部'scrollBusy'标志并启动一个15毫秒的计时器。在每个计时器滴答声中,调用控件的Invalidate()方法,以便在再次调用方法时为TranslateTransform计算新值。计算从原始滚动位置到目标滚动位置的增量,所以它需要250毫秒。