保存表单时,为什么winform控件会自行移动

当我在VS 2012中的编辑器中关闭我的表单时,我遇到了按钮控件移动的问题。我在C#中专门工作。 这让我疯狂,因为每次打开设计师时我都需要重新定位控件。

Form Size 995, 625 Button Location ------ -------- Save button 617, 575 Delete button 701, 575 Clear button 785, 575 Cancel button 869, 575 

按钮固定在底部,右边

表单最大大小为0,0

这些按钮上方有一个TabControl。 我以前遇到过这个问题,我很确定它也包含一个带TabControl的表单。

在这种forms下面有几层inheritance,但两者都定义得更小。 这里的按钮inheritance自这一个下面的表格。 在那个表格上,他们被锚定在Top,Left所以我认为如果他们受到那些forms定位的影响,我的控制将向上移动并离开。 他们一直向下和向右移动。

重现的步骤。

  • 如上所述定位控件。 (无需进一步编辑)
  • 保存表单。 (还没有明显的变化)
  • 关闭表格。
  • 重新打开表单,控件位于以下位置:
  Button Location Save button 852, 664 (off visible form) Delete button 936, 631 (off visible form) Clear button 1020, 630 (off visible form) Cancel button 1104, 664 (off visible form) 

这些地点各不相同 有时它们仍处于形状上,或部分位于较低位置并且不再对齐的形状上。 它们总是较低和向右,好像它们在关闭过程中受到不断变化的形状大小的影响。

如果我在设计师中制作更大的形状,他们就会继续向下移动并保持不正常状态。

我现在已经采用编程方式对它们进行定位,但我宁愿了解正在发生的事情,以便将来阻止它。

如果您有一个基本表单(或用户控件),您可以为控件设置一些锚点,而在派生设计器中,您的表单具有不同的大小,则会发生这种情况。

一种可能的解决方案是忘记锚定并使用对接。 您可以使用DockMarginPadding属性来实现所有function; 但是,第一次可能需要使用许多不可见的面板(例如,当您想要使用彼此之下的两行控件时)可能会很奇怪。 这与在WPF中使用Stack / Dock面板类似。

在此处输入图像描述

此外,您还可以使用TableLayoutPanel