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
メソッドを呼び出すことで、フォームのレイアウトロジックの更新を再開することができます。
ディスカッション
コメント一覧
まだ、コメントがありません