我正在增强显示TIFF图像的Windows窗体应用程序。该应用程序在Panel顶部有一个Picturebox,一次显示1个图像页面(有缩略图,用户可以点击这些缩略图查看特定图像)。如果有多个图像,则用户希望通过使用诸如鼠标滚轮之类的事件来查看下一个图像。我们目前有上一个和下一个箭头按钮/功能,但他们想要更多)
我认为我应该做的是在鼠标滚轮事件期间查看图像是否在底部,然后选择下一个。同样,相反的方式,如果他们使用鼠标滚轮上升,获取上一个图像并滚动到底部。
另外,我需要注意的是,图像可能比Panel大,因此会出现垂直滚动条。因此,使用鼠标滚轮时,需要确保它位于底部。
提前致谢。
答案 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)
{ .... }