0

MDI子フォームを開くWindowsフォームアプリケーションがあります。これらのフォームを選択するときは、ウィンドウ状態を最大化に設定またはレンダリングする必要があります。問題は、開いているフォーム間を移動すると、通常のウィンドウ状態に戻り、ウィンドウ状態を再び最大化に設定すると、通常状態から最大化状態への遷移が表示され、見栄えがよくないことです。

最大化されたウィンドウ状態で多くのMDI子を開くMDI親フォームを持つWindowsアプリケーションをどのように作成できますか?

4

4 に答える 4

3

ウィンドウの状態を常に最大化する場合は、MDIフォームから切り替えることをお勧めします。その場合、TabControlの方がうまくいく可能性があります。

MDIフォームには、かなりの数のユーザビリティの問題があります。そのため、MDIフォームはもはや一般的に使用されておらず、他のコントロール/オプションに置き換えられる傾向があります。

于 2010-02-17T01:46:28.490 に答える
3

これは、MDIの「親フォームと子フォームのパラダイム」を使用した場合の回答です。次の前提があります。

  1. あなたはMenuStripコントロールを持っています'Dock='MDIParentFormのトップ、そしてあなたは以下で説明されるように自動MDI&Windowメニューハンドラーを実装しました:方法:MenuStripでMDIウィンドウリストを作成する

  2. 次のような新しい子フォームを作成しています。

    a。MaximizeBox、MinimizeBoxなどはありませんが、ControlBox(それらを閉じるため)がある場合があります

    b。これらの子フォームはサイズ変更可能かどうかは不明です。ここでは、その影響については考慮しません。

  3. これらのMDIChildFormsをMDIParentフォームで最大化して表示する必要がありますが、MDIParentFormのメニューを不明瞭にしないでください。

わかりました:すべての子フォームが完全に設計されていると仮定すると、「翼で待っています」:MDIParentFormコードに次のようなコードが表示される場合があります:

    // create instances of your child forms
    Form2 f2 = new Form2();
    Form3 f3 = new Form3();
    Form4 f4 = new Form4();
    Form5 f5 = new Form5();

    private void MDIParentForm1_Load(object sender, EventArgs e)
    {
        f2.Text = "subForm1";
        f3.Text = "subForm2";
        f4.Text = "subForm3";
        f5.Text = "subForm4";

        f2.MdiParent = this;
        f3.MdiParent = this;
        f4.MdiParent = this;
        f5.MdiParent = this;

        f2.Dock = DockStyle.Fill;
        f3.Dock = DockStyle.Fill;
        f4.Dock = DockStyle.Fill;
        f5.Dock = DockStyle.Fill;

        f2.Show();
        f3.Show();
        f4.Show();
        f5.Show();
    }

この時点で、ドックスタイルの'塗りつぶしを子フォームに適用すると、子フォームが全画面表示になり、MDIParentFormメニューが見えにくくなるのを防ぎます。メニューを使用すると、最前面にあるフォームを自動選択できます。

さて、もっと凝ったことをしたいのなら:子フォームのサイズ変更、タイリング、カスケードなど。これらの子ウィンドウの'Dockプロパティを変更する必要があります:次に、ここで説明するように、組み込みのMDIパラダイムウィンドウ配置機能を利用できます:方法:MDI子フォームを配置する

また、1つのタイプの事前定義された子フォームの複数のインスタンスを作成する場合:MDI子フォームを作成する方法...'新しいメニューエントリの使用方法の例を参照してください:役立つ場合があります。

于 2010-02-17T09:12:04.357 に答える
0

葦の答え、特にあなたのコメントを読んだ後:

tabcontrolの問題は、子フォームごとに多くのコントロールが使用されていることです。

たぶんこれは役立つでしょう:あなたのコントロールをに入れないでくださいWinform。代わりに、それらをにカプセル化しますUserControl(おそらく、継承をからFormに変更することですでに機能していますUserControl)。

次に、すべてのUserControlを独自のTabPageに配置し、そのDockプロパティをFillに設定します。これで、別のTabPage上の別のコントロールに干渉することなく、各UserControlを独自に変更できます(接続が組み込まれていない場合)。

于 2010-02-17T09:42:29.283 に答える
0

MDIをあきらめるつもりなら、WeifenLuoDigitalRuneのようなドッキングフレームワークを見ることができます。これらは無料です。他のオプションについては、こちらをご覧ください:http ://windowsclient.net/downloads/folders/controlgallery/tags/Windows+Forms+Docking+Windows/default.aspx


編集:

よく覚えていると思いますが、DigitalRuneでは、ドッキングされたコンテンツのコンテナーとしてWindowsフォームを使用できるため、移行の労力が少なくて済みます。

于 2010-02-17T09:57:04.757 に答える