【问题标题】:Getting Scrollbar position from Mouse wheel event从鼠标滚轮事件获取滚动条位置
【发布时间】:2015-12-16 09:11:51
【问题描述】:

我在 winform 中有一个面板。我想为面板捕获滚动和鼠标滚轮事件。对于这两种情况,我都想检查滚动条的位置。

当滚动条位于底部时(滚动结束时...),控件应该触发该事件。

我已经为 Panel.Scroll 这样做了:

private void Panel1_Scroll(object sender, ScrollEventArgs e)
{            
    if (e.NewValue == Panel1.VerticalScroll.Maximum - Panel1.VerticalScroll.LargeChange+1)
    {
      //do some operation
    }
}

但是对于 MouseEventArgs 没有值 (e.newvalue) 来指示滚动条的位置。

如何从鼠标滚轮事件中获取滚动条位置?

另外根据我的要求,两个事件调用都有相同的逻辑实现,所以我想写一次逻辑。

我怎样才能做到这一点?

【问题讨论】:

  • 你当然不能。如果 MouseWheel 事件实际滚动面板,它将触发 Scroll 事件,因此无需帮助。该面板必须包含一个或多个可以获取焦点的控件,或者您必须创建一个可以获取焦点的panel control。请注意由于拇指大小导致滚动条的片状行为,您必须使用 >= 而不是 ==。

标签: c# winforms events panel mousewheel


【解决方案1】:

经过进一步分析,我发现panel1.VerticalScroll.Value 相当于e.NewValueScrollEventArgs

因此,为了代码的可重用性,可以使用以下代码:

private void panel1_Scroll(object sender, ScrollEventArgs e)
{
  panel1_scrollcheck(e.NewValue);
}

private void panel1_MouseWheel(object sender, MouseEventArgs e)
{
  panel1_scrollcheck(panel1.VerticalScroll.Value);
}

private void panel1_scrollcheck(int currPos)
{
  if (currPos == panel1.VerticalScroll.Maximum - panel1.VerticalScroll.LargeChange+1)
    {
      //Put the logic here
    }
}

【讨论】:

  • 所以你只是使用了我的答案,甚至没有接受它?
  • @meiya,我接受了你的回答,尽管它是部分的。而且 if 条件是错误的(不确定你的实现,但对我来说,平等的条件是有效的,而且 currPos 永远不会>...如果有疑问,请检查我的确切问题...)
  • 为什么是局部的?我向您展示了使用什么来解决您的问题并举例说明。还是你在等我给你写所有代码?
【解决方案2】:

试试VerticalScrollPanel的属性。

    void MouseWheel(object sender, MouseEventArgs e)
    {
        if (_panel.VerticalScroll.Value > _panel.VerticalScroll.Maximum - _panel.VerticalScroll.LargeChange)
            MessageBox.Show("Bottom");
    }

【讨论】:

  • 非常适合我的要求。但是我无法为滚动和鼠标滚轮实现相同的逻辑,因为它们具有不同的事件参数!!!
  • 但是你可以在这两种情况下使用panel.VerticalScroll.Value - 滚动和鼠标滚轮而不是e.NewValue
  • 正确,但是滚动和鼠标滚轮有不同的事件参数,所以它不能超载
  • 您可以为Panle.MouseWheel 添加处理程序。 panel.MouseWheel += new MouseEventHandler(panel_MouseWheel); 和我一样。我以为你知道这一点。
  • 感谢您的宝贵回复。我已经为我正在寻找的东西提供了确切的解决方案。无论如何再次感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多