C# フォームが最大化されているかどうかを確認する
質問
さて、ここが私の問題です。最大化されていないフォームの最大サイズは、フォーム内のコンポーネントの合計の高さでなければなりません。これを達成するために、私はこれを使用します:
private void resize_form(object sender, EventArgs e)
{
this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
}
これはフォームの Resize イベントで発生します。コンポーネントのサイズは常に変化するため、サイズ変更イベントでこれを行うのが合理的です。ただし、フォームを最大化したい場合、フォームは this.MinimumSize で定義された最高の設定になるだけです。そこで私は、フォームが最大化されるタイミングを判断し、フォームが最大化される前にそのmaximumsizeを画面の境界に設定する方法はあるだろうかと疑問に思っていました。
サイズ変更イベントを使用せずにmaximumsize値を変更するより良い方法があれば、それも素晴らしいでしょう:)
解決 2
私は完全に私に合った答えを見つけました。リルのWndProcオーバーライド:D(私は今のWndProcを愛する)
protected override void WndProc(ref Message message)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_MAXIMIZE = 0xF030;
switch (message.Msg)
{
case WM_SYSCOMMAND:
int command = message.WParam.ToInt32() & 0xfff0;
if (command == SC_MAXIMIZE)
{
this.maximize = true;
this.MaximumSize = new System.Drawing.Size(0, 0);
}
break;
}
base.WndProc(ref message);
}
private void resize_form(object sender, EventArgs e)
{
if (!maximize)
{
this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
}
}
それはtehのSC_MAXIMIZEメッセージを受信したときに基本的にはtrueにthis.maximizeを設定します。 this.maximizeがfalseに設定されている場合は、resizeイベントは、新しいのMaximumSizeを設定します。ニフティのxD
他のヒント
あなたはまだ、resizeイベントを使用しますが、WindowState
をチェックする必要があります:
if (this.WindowState == FormWindowState.Maximized)
{
// Do your stuff
}
yshuditeluが指摘するように、あなたも、フォームの最小サイズプロパティを設定することができます - アンカー値の賢明な利用と組み合わせると、それはあまりにも遠くに縮小することはできません、それはコンポーネントを成長したときに/移動となることを意味するはずですまたは必要に応じて成長します。
を設定したくないですか? 最小サイズ 財産?MinimumSize をすべてのラベルのサイズに設定すると、フォームがそれより小さくなることはありません。ただし、最小値より大きい限り、ユーザーが望む任意のサイズまで拡張できます。
のSystem.Windows.Formsをチェックしてください。画面のクラス。関連するポイントから画面を取得(マルチ月のケースを処理するため)、その後、その解像度を取得します。
このはFormWindowState.Maximizedの確認について他のコメントと連動して動作するはずです。
、彼らはウィンドウのサイズを変更することができますので、私はこれを使用します:
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Maximized;
}
}