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

3
我需要在WinForms中实现一个响应式表单,其中有一个复选框位于xy位置。当我调整窗体大小为较小尺寸时,此复选框应向左侧移动,靠近其他元素。
您可以看到我制作的图片。我不知道要更改哪个属性,才能使这种情况发生。红框标记了要移动的复选框。
当我放大表单时,该元素必须保持在其默认位置。当我缩小它时,复选框必须向左移动。当我再次放大它时,复选框必须移回其默认位置。

this is the default form

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


查看 Anchor 属性。 - Steve
Steve比我先完成了它,(几乎)每个控件都有一个锚定属性。 - EpicKip
我更新了我的解释 :) 新增的信息是:当我放大表单时,该元素必须保持在其默认位置。当我缩小它时,复选框必须向左移动。当我再次放大它时,复选框必须移回到其默认位置。 - peterHasemann
3个回答

5
您需要设置 Anchor 属性:
checkBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right;

这意味着控件的右侧边框应始终与包含控件(即您的表单)的右侧边框保持相同的距离。

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


在您的澄清之后更新:

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

  • Panel放置在CheckBox可能位于的最左边位置
  • 设置Panel的大小,以使其右边缘位于CheckBox应该有的右边缘(加上几个像素)的最右边缘
  • PanelMaximumSize设置为这个确切的大小
  • PanelAnchor属性设置为Top | Left | Right
  • Panel内部的右侧放置CheckBox
  • CheckBoxAnchor属性设置为Top | Right

现在,如果您扩大FormPanel会保持其大小,因为有了MaximumSize值。

如果您缩小FormPanel也会收缩,因为它的AnchorStyle.Right。由于自己的AnchorStyle.RightCheckBox向左移动。

当您再次扩大Form时,Panel也会增长,但仅当它再次达到其MaximumSize时。为跟上不断增长的PanelCheckBox会向右移动。

希望这样做可以满足您的要求。如有必要,我以后可以添加屏幕截图。


抱歉,也许我没有解释清楚。它已经有了顶部和左侧的锚点。因为当我扩大表单时,复选框必须保持在其位置上。它只需要在变小时向左移动。这是我的问题。 - peterHasemann
@peterHasemann,你的问题似乎没有明确说明。这是一个复杂的要求。如果你放大表单,它是否应该始终保持在原位?即使之前因为缩小表单而移动到左边?可能有帮助的是定义表单的最小大小。在设计器中将其缩小到该最小大小,设置复选框的位置并仅设置右锚定点。然后将表单调整为其“默认”表单大小。现在行为应该接近你想要的。如果不是,似乎你将不得不自己实现这种行为,使用表单的SizeChanged事件。 - René Vogt
当我放大窗体时,该元素必须保持其默认位置。当我缩小它时,复选框必须向左移动。当我再次扩大它时,复选框必须移回到其默认位置。希望这是一个更好的解释。 - peterHasemann
我尝试使用SizeChanged-Event。因此,当它被调用时,我会计算该元素的horizontalPosition。但是,我也会测试你的建议 :) - peterHasemann

1
你可以使用TableLayoutPanel。通过这个元素,你可以将列和行的大小设置为百分比类型,并将值“左、右、上、下”设置为TableLayoutPanel和其中所有元素的Anchor属性。

enter image description here

enter image description here


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
}

重要!这只是用于水平移动。垂直方向是固定的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接