WindowsFormsアプリでフォームのサイズ変更で縦横比を一定にする

次のような動作にしたい場合

実行結果

PictureBoxを貼り付けていますので、サイズ変更中のちらつきは否めません

 コード

Formのイベントを登録します
方法については、ここでは、割愛します

private void Form1_Resize(object sender, EventArgs e)
{
    SuspendLayout();

    if (this.Width > this.Height)
    {
        this.Height = this.Width;
    }
    else
    {
        this.Width = this.Height;
    }
    ResumeLayout();

}

private void Form1_Load(object sender, EventArgs e)
{
    ResizeRedraw = false;
    DoubleBuffered = true;
    this.MinimumSize = new Size(200, 200);
    this.MaximumSize = new Size(800, 800);
}

Form1_Loadイベントハンドラは、フォームがロードされたときに実行されるコードを定義しています。具体的には、次のことが行われています。

  • ResizeRedrawプロパティをfalseに設定することで、フォームのサイズ変更時に再描画を防止することができます。
  • DoubleBufferedプロパティをtrueに設定することで、描画時にダブルバッファリングを有効にし、描画のスムーズさと効率性を向上させることができます。
  • MinimumSizeプロパティとMaximumSizeプロパティを設定することで、フォームの最小サイズと最大サイズを指定することができます。

Form1_Resizeイベントハンドラは、フォームがリサイズされたときに実行されるコードを定義しています。具体的には、次のことが行われています。

  • SuspendLayoutメソッドを呼び出すことで、フォームのレイアウトロジックの更新を一時停止することができます。
  • フォームの幅と高さを比較して、より小さい方に合わせてフォームのサイズを変更します。つまり、正方形のフォームを維持するために、フォームのサイズを調整しています。
  • ResumeLayoutメソッドを呼び出すことで、フォームのレイアウトロジックの更新を再開することができます。