在设计时,我已经将Anchor属性用于某些控件。
但是,当我在运行时更改这些控件的.Top属性时,似乎它与Anchor属性混淆了,不再使用它了。
怎么了?怎么修?

最佳答案

我试图重现您描述的问题,但无法完全匹配它。但是,以下示例可以帮助您解决我怀疑遇到的问题。

(我的雇主阻止了i.imgur.com(SO的图像主机)。如果您在查看屏幕截图时遇到任何问题,请告诉我。)

下面的简单表单包含一个在其父表单的所有四个侧面均锚定的组框。



单击该按钮时,将执行以下代码:

groupBox1.Top = 0;


导致分组框重新定位,如下所示:



但是请注意,锚定仍然被接受:



我怀疑您正在寻找的效果是,调整控件的大小时,除了控件的顶部位置之外,其他任何内容都不会更改。不幸的是,在这种情况下,设置Top属性将重新定位控件,而不是调整其大小。

但是,您可以使用SetBounds()方法完成大小调整。在下面的示例中,我使用现有边界调整锚定控件的大小,使其具有新的顶部。请注意,我可能不会采取任何措施来避免非法的负高度。

        int newtop = 0; // the new top bound
groupBox1.SetBounds(
        groupBox1.Left,
        newtop,
        groupBox1.Width,
        groupBox1.Height + groupBox1.Top - newtop);


这将导致调整大小和重新定位的控件,此后继续继续其锚定:

10-06 12:05