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

本文关键字:是否 底部 图像 鼠标 检查 | 更新日期: 2024-09-20 15:14:49

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

我认为我应该做的是在鼠标滚轮事件中找出图像是否在底部,然后选择下一个。同样,相反的方式,如果他们使用鼠标滚轮向上移动,则获取上一张图像并滚动到底部。

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

提前谢谢。

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

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

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

这有道理/回答你的问题?

我找到了这个的解决方案

1) 创建了一个新变量来存储以前的垂直滚动值(prevVScrollVal)
2) 创建新的鼠标事件处理程序

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)
    {  ....  }