フォームにコントロールがあり、幅を制御できるようにしたいのですが、元の縦横比を維持するためにコントロールの高さを変更します。それは私に次の質問をもたらします:
質問:
- コントロールの正確な縦横比をどのように決定しますか?
- 高さを新しい幅の正しいアスペクトに設定するには、サイズ変更イベントで何をすればよいですか?
フォームにコントロールがあり、幅を制御できるようにしたいのですが、元の縦横比を維持するためにコントロールの高さを変更します。それは私に次の質問をもたらします:
縦横比は、単純に 1 つの軸と他の軸の比率 (幅/高さ) です。
アスペクト比を維持するには、ターゲット (newWidth, newHeight) を指定すると、(newWidth/newHeight) == (Width/Height) であることを確認する必要があります。
これを達成するには、(たとえば) 幅または高さのどちらが最も重要な軸であるかを決定する必要があります。幅を固定すると、幅から高さを計算して縦横比を維持できます。
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);
}
アスペクト比は幅/高さです。たとえば、640 x 480 のサイズの画面は 4:3 の縦横比、つまり 1.33333 です。
フォームの読み込み時に、幅を高さで割って変数に永続化することで、コントロールのアスペクト比を永続化できます。次に、フォームのサイズ変更時に、各コントロールの高さをリセットして、保存されたアスペクト比に一致させます。
myControl.Height = Math.Round(myControl.Width x mySavedRatio);