如何检测WinForms 面板是否已滚动到末尾

本文关键字:是否 滚动 何检测 检测 WinForms | 更新日期: 2023-09-27 18:37:24

我正在开发一个WinForms应用程序,其中有一个包含一些用户控件的面板。首次加载面板时,它会显示 10 个用户控件。但是当它完全向下滚动时,它应该在面板的末尾加载并附加更多的用户控件。我正在尝试使用以下代码实现此目的:

private void topicContainer_Scroll(object sender, ScrollEventArgs e)
{
      if (e.NewValue== topicContainer.VerticalScroll.Value)
                MessageBox.Show("Topics load here");
}

这只是一个试验。我不知道这个NewValue到底是什么意思。那么,你能告诉我如何完成我的这项任务吗?

如何检测WinForms 面板是否已滚动到末尾

正如其他人所提到的,滚动条永远不会达到其最大值,这是由于 LargeChange 属性被考虑在等式中:

private void topicContainer_Scroll(object sender, ScrollEventArgs e)
{
  VScrollProperties vs = topicContainer.VerticalScroll;
  if (e.NewValue == vs.Maximum - vs.LargeChange + 1) {
    // scrolled to the bottom
  }
}

+ 1用于从零开始的偏移量。 如果将自动滚动最小大小高度属性设置为 500,则最大值实际上是 499。

MSDN很好地涵盖了这种情况。你检查过了吗?

  • 可滚动控件.滚动
  • ScrollEventHandler
  • ScrollEventArgs

请记住滚动条的奇怪行为:用户永远无法达到其Maximum。阅读滚动条中的备注。最大 MSDN 帮助页。

此函数必须放在静态类中。

public static bool IsScrolledDown(this ScrollableControl c) {
    return !c.VerticalScroll.Visible || c.VerticalScroll.Value == c.VerticalScroll.Maximum - c.VerticalScroll.LargeChange + 1;
}
if(topicContainer.VerticalScroll.Value == topicContainer.VericalScroll.Maximum)
{

}