0

Visual Studio 2010 を使用して C# GUI を実行しています。

私が直面している現在の問題は、ウィンドウを最大化した後、そこにとどまりますが、他のフォームに移動すると、ウィンドウが元のサイズに戻ることです。

最大化ボタンをクリックすると、すべてのフォームで最大化されたウィンドウをそのままにしておくにはどうすればよいですか?

例を次に示します。

  1. ユーザーがフォーム A を最大化
  2. フォーム A 最大化
  3. ユーザーはフォーム B に移動します
  4. フォーム B が最大化されたウィンドウではなく元のサイズに戻る

私が欲しいのは、ユーザーがフォームを最大化したとき、プログラムが閉じられるかサイズが変更されるまでそのままです。

4

1 に答える 1

1

WinForms を使用していると仮定すると、共有 FormWindowState マネージャーを実装するか、Multiple Document Interface (MDI) コンテナーを使用することができます。

共有 FormWindowState

フォームの FormWindowState の変更を伝達するクラスに、各フォームを登録できます。

public class FormWindowStateManager {
    List<Form> _Forms;

    ...

    public void Register(Form form) {
        if(!_Forms.Contains(form)) {
            _Forms.Add(form);
            form.Resize += new EventHandler(Form_Resize);
        }
    }

    public void Unregister(Form form) {
        if(_Forms.Contains(form)) {
            _Forms.Remove(form);
            form.Resize -= new EventHandler(Form_Resize);
        }
    }

    private void Form_Resize(object sender, EventArgs e) {
        Form form = sender as Form;
        if(form != null) {
            if(form.FormWindowState == FormWindowState.Maximized || form.FormWindowState == FormWindowState.Normal) {
                PropagateWindowState(form.FormWindowState);
            }
        }
    }

    private void PropagateWindowState(FormWindowState state) {
        foreach(Form form in _Forms) {
            if(form.FormWindowState != state) {
                form.FormWindowState = state;
            }
        }
    } 
}

MDI コンテナ

MdiParentForm.cs

IsMdiContainer = true;

MdiChildForm.cs

MdiParent = myParentForm; // instance of MdiParentForm

MdiChildrenフォームのプロパティを使用してフォームの MDI 子を反復処理し、 MDI 子ウィンドウでそのFormWindowStateを変更すると、共有 FormWindowState アプローチと同様に、MDI 親フォームがその変更を各子に適用できます。

これらのアイデアは私の頭の中にあるものですが、おそらく正しい方向に導くでしょう.

于 2010-11-30T08:11:34.117 に答える