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

时间:2017-02-13 09:16:38

标签: c# winforms dialog responsive

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

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

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

this is the default form

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

3 个答案:

答案 0 :(得分:3)

您需要设置Anchor属性:

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

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

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

澄清后更新:

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

  • Panel放在CheckBox可能拥有的最左侧位置
  • 设置Panel的大小,使右边框位于CheckBox应该具有的最右边(加上几个像素)
  • MaximumSize的{​​{1}}设置为此确切尺寸
  • Panel的{​​{1}}属性设置为Anchor
  • Panel放在Top | Left | Right右侧边缘
  • CheckBox的{​​{1}}属性设置为Panel

现在,如果您放大AnchorCheckBox会因Top | Right值而保持其大小。

如果缩小FormPanel也会因MaximumSize而缩小。 Form由于其自己的Panel而向左移动。

再次放大AnchorStyle.Right时,CheckBox也会增长,但只会再次到达AnchorStyle.RightForm向右移动以跟上不断增长的Panel

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

答案 1 :(得分: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
}

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

答案 2 :(得分:0)

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

enter image description here

enter image description here