查找并强制执行宽高比

时间:2010-09-09 21:28:18

标签: c# resize aspect-ratio

我的窗体上有一个控件,我希望能够控制宽度,并且控件的高度会改变以保持其原始宽高比。这让我想到了以下问题:

问题:

  • 如何确定控件的精确纵横比?
  • 如何在resize事件中将高度设置为新宽度的正确宽高?

2 个答案:

答案 0 :(得分:3)

纵横比只是一个轴与另一个轴的比率:宽度/高度。

要保留宽高比,给定目标(newWidth,newHeight),您只需确保(newWidth / newHeight)==(宽度/高度)

要实现这一点,您必须(例如)决定宽度或高度是否是最重要的轴。如果固定宽度,则可以从宽度计算高度以保持纵横比:

newWidth = newWidth;
newHeight = newWidth * (Height / Width)

要强制执行此操作,您只需要坐在Resize事件上,以便在尝试调整控件大小时控制大小:

private void Form1_Resize(object sender, System.EventArgs e)
{
    sender.Size = new Size(control.Size.Width, control.Size.Width * desiredAspectRatio);
}

答案 1 :(得分:1)

宽高比是宽度/高度。例如,640×480尺寸屏幕的宽高比为4:3,或1.33333。

在表单加载时,您可以通过将宽度除以高度并持久保存到变量来保持控件的宽高比,然后在窗体调整大小时重置每个控件的高度以匹配保存的宽高比,通过执行

myControl.Height = Math.Round(myControl.Width x mySavedRatio);