鼠标滚轮时检查图像是否在底部

时间:2012-08-01 18:02:49

标签: c# winforms

我正在增强显示TIFF图像的Windows窗体应用程序。该应用程序在Panel顶部有一个Picturebox,一次显示1个图像页面(有缩略图,用户可以点击这些缩略图查看特定图像)。如果有多个图像,则用户希望通过使用诸如鼠标滚轮之类的事件来查看下一个图像。我们目前有上一个和下一个箭头按钮/功能,但他们想要更多)

我认为我应该做的是在鼠标滚轮事件期间查看图像是否在底部,然后选择下一个。同样,相反的方式,如果他们使用鼠标滚轮上升,获取上一个图像并滚动到底部。

另外,我需要注意的是,图像可能比Panel大,因此会出现垂直滚动条。因此,使用鼠标滚轮时,需要确保它位于底部。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以使用MouseWheelEvent在滚动条件上添加事件处理程序,然后查看e.Delta

如果e.delta为正,则向上滚动,如果为负,则只增加或减少要显示的图像索引。

这有意义/回答你的问题吗?

答案 1 :(得分:0)

我找到了解决方案

1)创建了一个新变量来存储先前的垂直滚动值(prevVScrollVal) 2)创建一个新的MouseEventHandler

this.imageContainer.MouseWheel += new MouseEventHandler(this.imageContainer_MouseWheel);

3)在鼠标事件处理程序中通过查看@ e.delta来确定是上升还是下降,然后检查前一个滚动值是否相同并相应地切换图像。

    private void imageContainer_MouseWheel(object sender, MouseEventArgs e)
    {
        if (e.Delta > 0)
        {
            imageContainer_MouseWheelScrollUp(sender, e);
        }
        else if (e.Delta < 0)
        {
            imageContainer_MouseWheelScrollDown(sender, e);
        }

        prevVScrollVal = imageContainer.VerticalScroll.Value;
    }

    private void imageContainer_MouseWheelScrollUp(object sender, MouseEventArgs e)
    {
        if (imageContainer.VerticalScroll.Value == 0 && 
            prevVScrollVal == 0 && 
            current > 1)
        {
            setPagePrev();
        }
    }

    private void imageContainer_MouseWheelScrollDown(object sender, MouseEventArgs e)
    {

        if (imageContainer.VerticalScroll.Value == prevVScrollVal && 
                current < endPage)
        {
            setPageNext();
        }
    }

    /// <summary>
    /// Sets the page to the Next
    /// </summary>
    private void setPageNext()
    {
        setPage(current + 1);
    }

    /// <summary>
    /// Sets the page to the Previous
    /// </summary>
    private void setPagePrev()
    {
        setPage(current - 1);
        prevVScrollVal = imageContainer.VerticalScroll.Maximum;
        imageContainer.VerticalScroll.Value = imageContainer.VerticalScroll.Maximum;
        imageContainer.PerformLayout();
    }
    /// <summary>
    /// Sets the page to be viewed
    /// </summary>
    /// <param name="page">page to be viewed</param>
    public void setPage(int page)
    {  ....  }