动态加载控件出现的位置错乱问题

采用代码动态添加控件

            btn.Top = BtnTop ;

            btn.Height = 49;

            BtnTop += btn.Height + 1;

           this.Controls.Add(btn);

当控件太多时会出现滚动条,当拖动滚动条后再用上面的代码加载控件,

就会出现下图那样的位置错乱

动态加载控件出现的位置错乱问题

原因在于winform大部分控件的Y坐标0点是从可视区域算起。如果想要正常显示,

我们需要把已经上拉部分的高度减去。

这个时候可以使用 AutoScrollPosition.Y属性,这个属性可以知道上拉了多少像素。

注意这个属性的数值都是负的,所以改成下面的代码就可以正常显示了。

           btn.Top = BtnTop + this.AutoScrollPosition.Y;

            btn.Height = 49;

            BtnTop += btn.Height + 1;

           this.Controls.Add(btn);