首页 > 解决方案 > 在 TableLayoutPanel 中检测垂直滚动的结束

问题描述

我有一个TableLayoutPanel在其中插入多个项目的位置,因此ScrollBar位置会根据我从端点获得的项目而改变。

添加到面板的控件被添加到foreach如下语句中:

foreach (var test in testList)
{
  //Multiple Combobox, panels etc. created programatically
    tableLayoutPanel.Controls.Add(control1);
    tableLayoutPanel.Controls.Add(control2);
    tableLayoutPanel.Controls.Add(control3);
}
FormatPanel(tableLayoutPanel);

我也将我的面板格式化为:

 private void FormatPanel(TableLayoutPanel panel)
        {
            TableLayoutRowStyleCollection styles = panel.RowStyles;
            foreach (RowStyle style in styles)
            {
                style.SizeType = SizeType.Absolute;
                style.Height = 50;
            }
        panel.HorizontalScroll.Maximum = 0;
        panel.AutoScroll = false;
        panel.VerticalScroll.Visible = false;
        panel.AutoScroll = true;
    }

我想知道如何检测ScrollBar位置是否在地面并触发事件?

怎样才能做到这一点?

更新

我尝试在之后立即使用构造函数InitializeComponent()

  tableLayoutPanel.Scroll +=  (s, e) => {
                HandleScroll();
            };

然后我创建HandleScroll方法:

  private void HandleScroll()
        {
            var maxVerticalScroll = tableLayoutPanel.VerticalScroll.Maximum;

            if (tableLayoutPanel.VerticalScroll.Value == maxVerticalScroll)
            {
                var a = "";
            }

        }

但是由于某种原因 maxvalue 高于我滚动的结尾,为什么会发生这种情况?

标签: c#winformstablelayoutpanel

解决方案


推荐阅读