这两天弄一个WinForm程序,程序有个界面是由多个Panel组成,一个大的Panel包含N个小Panel,每个子Panel可以隐藏掉,或者显示出来,隐藏的子Pannel,它以下的panel需要顶上去
因此就需要通过计算来设置panel.Location.Y的值。
我的做法是使用一个成员变量Y来记录距离顶部的高度,也就是每次显示一个Panel的时候加上它的高度,也就是
Y += panel.Location.Y;
每次隐藏panel的时候,Y -= pannel.Location.Y;
但是当界面出现较多Panel,然后界面出现滚动条时,再显示Panel的时候就出现问题。
后来请教了同事,终于发现问题的所在:
原来panel.Location的值是相对于窗体的最上方,而不是相对父Panel。
所以当屏幕出现滚动的时候,那么就需要减去滚动的长度。也就是需要加上第一个Panel的高度,因为第一个是负数了。
也就是panel.Location = new Point(x,Y+firstPanel.Location.Y)