2009-05-03 54 views
3

我在运行时动态添加一些文本框到表单。一切正常,即文本框对齐,锚定并自动调整大小,直到表单被最大化。在最大化窗体时,将文本框添加到相同的位置,而窗体最大化为而不是。这会导致文本框不对齐。使用动态添加控件的锚定属性

我怎样才能确保所有的文本框都在相同的位置和相同的大小,同时windowstate是正常的以及最大化?

编辑:

顺便说一下我使用C#

编辑:

会一个FlowLayoutPanel的有用吗?

+0

你正在使用什么锚定设置?默认值(Top | Left)会使您的控件停留在相对于表单左上角的相同位置,并且无论表单做什么都保持相同的大小。 – 2009-05-03 19:01:00

+0

我正在使用Top | Right Anchor设置。 Anchor设置为Top | Left的文本框正确排列。 – tijuthomas 2009-05-03 19:07:51

+0

因此,Top | Right文本框显示粘贴在表单的右上角?当表单被调整大小时,你希望这些文本框如何排列? – 2009-05-03 19:20:17

回答

0

Anchor属性指定控件的哪些边界应确保它们始终与距离相同。它会变得非常混乱,这就是为什么当锚定到正确的边框时你会看到事物转移的原因。

如果你只是想确保文本框显示保持相对于自身的一致性,我建议放下一个面板,锚定面板,然后添加文本框到面板。文本框上的X和Y坐标相对于面板而言,因此布局更容易,尤其是当面板的位置突然变化时。

2

这是一个相当古老的问题,但也许我能够回答它。

阅读您的所有意见后,我想我可以总结一下你的问题是:

  • 你必须要在一个特定大小的格式,并在运行时在特定位置的锚设置为Top | Right添加一些控件。
  • 如果你只是显示表单并让控件显示一切正常
  • 如果你最大化你的表单(或改变它的大小)你的控件将不会再出现在你想要的正确位置。

为了摆脱这个问题,你可以尝试一些不同的方法:

  1. 使用FlowLayoutPanel,照顾为FlowDirection,也许只是创建所需的所有控制事前,只是切换可见状态。
  2. 对新创建的控件的位置使用正确的值。

第二点是你有错误(我认为)。如果您的表单具有原始尺寸,您可以找到一个计算控件位置的方法。为了在表单大小发生变化(例如最大化)时获得正确的位置,您必须考虑几个因素。

  • 从您的默认大小到您当前大小的增量值。
  • 您想要在您的控制上设置的锚点。

在你的情况下,你想要把一个控制挂钩Top | Right,但位置由Top | Left设置。在这种情况下,您必须计算control.location.x和form.width之间的差异,默认大小。然后你采取这种差异,并从表格当前宽度中减去它。现在你可以将你的控件放置在这个位置(因为Top不会通过调整大小来改变)。如果你在Bottom | Right有一个Anchor,你必须计算与control.location.y和form.height相同的值。

如果设置为Top | BottomLeft | Right没有锚点,则行为和计算作为练习留给读者。 ;-)

最后但并非最不重要也有另一种哈克的方式在合适的位置,让您的控制:

  • 如果你喜欢的地方放置一个新的控制改变Form.Visiblefalse
  • 保存形式状态,大小和位置
  • 其更改为默认值
  • 添加要
  • 控件恢复以前保存的值
  • 使窗体再次可见。