从鼠标滚轮事件获取滚动条位置

Getting Scrollbar position from Mouse wheel event

我有一个 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) 来指示滚动条位置。

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

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

我怎样才能做到这一点?

试试你VerticalScroll属性Panel.

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

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

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

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
    }
}