我在运行时动态地向表单添加一些文本框。一切正常,即文本框对齐,锚定并自动调整的大小,直到表单最大化。在最大化表单时,文本框被添加到同一位置,而表单不最大化。这会导致文本框不对齐。
如果窗口状态正常且最大化,我如何确保所有文本框位于相同位置且大小相同?
编辑:
顺便说一下,我正在使用C#
编辑:
flowlayoutpanel会在这里有用吗?
答案 0 :(得分:2)
这是一个很老的问题,但也许我能够回答它。
阅读完所有评论后,我想我可以总结一下你的问题:
Top | Right
的特定位置添加一些控件。要摆脱这个问题,你可以尝试一些不同的方法:
第二点是你所犯的错误(我认为)。如果您的表单具有原始大小,您会发现计算控件的位置。要在表单大小发生变化(例如最大化)时获得正确的位置,您必须考虑几个因素。
在您的情况下,您希望放置一个锚定Top | Right
的控件,但该位置由Top | Left
设置。在这种情况下,您必须计算control.location.x和form.width之间的差异,它的默认大小。然后你取这个差异并从表格当前宽度中减去它。现在你可以把你的控件放在这个位置(因为Top永远不会通过调整大小来改变)。如果你有一个Bottom | Right
的锚,你必须用control.location.y和form.height来计算它。
如果设置了Top | Bottom
或Left | Right
,则没有锚点的行为和计算留给读者练习。 ; - )
最后但并非最不重要的是,还有另一种将你的控制权控制在正确位置的黑客方法:
Form.Visible
更改为false
答案 1 :(得分:0)
Anchor属性指定控件应该确保它们始终保持相同距离的边界。它可能会变得非常混乱,这就是为什么当看到东西锚定到右边界时会发生变化的原因。
如果您只是想确保文本框显示相对于自身保持一致,我建议放下一个Panel,在Panel上锚定,然后向Panel添加文本框。文本框上的X和Y坐标相对于Panel,因此布局更容易,特别是当Panel的位置突然改变时。