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

Mar*_*ark 6 c# forms winforms

当我在 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
Run Code Online (Sandbox Code Playgroud)

按钮固定在底部、右侧

表格最大尺寸为 0,0

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

这种形式下面有几层继承,但两者都定义得较小。这里使用的按钮继承自该按钮下方的表单。在该表单上,它们固定在顶部、左侧,因此我认为如果控件受到该表单定位的影响,它们将会向上和向左移动。他们始终向下和向右移动。

重现的步骤。

  • 如上所述放置控件。(没有进一步的编辑)
  • 保存表格。(还没有明显的变化)
  • 关闭表格。
  • 重新打开窗体,控件位置如下:
 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)
Run Code Online (Sandbox Code Playgroud)

这些位置各不相同。有时它们仍然在表单上,​​或者部分在表单上,​​只是处于较低位置并且不再对齐。它们总是较低且位于右侧,就好像它们在关闭过程中受到表单尺寸变化的影响一样。

如果我在设计器中将表单放大,它们就会继续向下移动并向右保持偏离形式。

我现在已经诉诸于以编程方式定位它们,但更愿意了解正在发生的事情,以便在将来防止它发生。

Gyö*_*zeg 5

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

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

在此输入图像描述

TableLayoutPanel此外,您也可以玩。