C#Windows窗体 - 调整窗体大小时移动元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#Windows窗体 - 调整窗体大小时移动元素相关的知识,希望对你有一定的参考价值。

我需要一些WinForms响应表单的帮助。我在位置xy有一个Checkbox。当我将表单调整为较小的大小时,此复选框应移动到左侧,更靠近其他元素。

你可以在我拍的照片上看到它。我不知道,我必须在那里改变哪个属性来实现这一目标。要移动的复选框由红色框标记。

当我放大窗体时,此元素必须保持其默认位置。当我减少它时,复选框必须向左移动。当我再次放大时,复选框必须移回其默认位置。

this is the default form

the form is smaller now, the checkbox has to move to the left

答案

您需要设置Anchor属性:

checkBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right;

这表明控件的右边界应始终与包含控件(表单)的右边界具有相同的距离。

您还可以在设计器窗口中设置此属性。


澄清后更新:

这是一个复杂的情况。我找到的一个解决方案(虽然我不确定它是最好的)可能是使用Panel来包含CheckBox

  • Panel放在CheckBox可能拥有的最左侧位置
  • 设置Panel的大小,使右边框位于CheckBox应该具有的最右边界(加上几个像素)
  • MaximumSizePanel设置为此精确大小
  • AnchorPanel属性设置为Top | Left | Right
  • CheckBox放在Panel的右边缘
  • AnchorCheckBox属性设置为Top | Right

现在,如果你扩大FormPanel保持其大小,因为MaximumSize值。

如果你缩小FormPanel也会因为它的AnchorStyle.Right而缩小。 CheckBox因为自己的AnchorStyle.Right而向左移动。

当你再次扩大Form时,Panel也会增长,但只会再次到达MaximumSizeCheckBox向右移动以跟上不断增长的Panel

希望这能做到你想要的。我可以在必要时添加截图。

另一答案

所以我试图为此获得一个干净的代码解决方案,我希望这对每个人都有用:

private void CtrlSequence_SizeChanged(object sender, EventArgs e) // Form got reduced / enlarged    
{
      checkBox.Location = new Point(Math.Min(Width - checkBox.Width, 345), checkBox.Location.Y);    // Width = Forms Width
}

重要!这仅适用于水平移动。垂直是固定的。

另一答案

您可以使用TableLyoutPanel。使用此元素,您可以在Percent类型中设置Column和Row大小,并将值“left,right,top,bottom”设置为TableLyoutPanel的属性Anchor以及所有元素insaid。

enter image description here

enter image description here

以上是关于C#Windows窗体 - 调整窗体大小时移动元素的主要内容,如果未能解决你的问题,请参考以下文章

调整面板大小以适应 Windows 窗体中包含的元素

在 Windows 窗体控件中调整大小以及窗体调整大小

C# Windows 窗体 ListView 在按宽度自动调整大小 = -1 后获取列的实际宽度?

C# Winform 窗体设计 设计时 窗体大小不能调整

如何在 Windows 窗体中调整列表控件的添加/删除大小以提供类似锚定的行为

vb窗体中的resize是啥事件?