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

问题描述 投票:1回答:3

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

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

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

this is the default form

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

c# winforms dialog responsive
3个回答
3
投票

您需要设置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

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


1
投票

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

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
}

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


0
投票

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

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.