1

メインフォームにいくつかの子フォームを追加しています。XP では、閉じるボタンが赤ではなく黒であることを除いて、親と子のタイトルバーは同じようです。しかし、Windows 7 では、画像が示すように、子フォームのタイトルバーがメイン フォームとは異なります。

ここに画像の説明を入力

これはどのように修正できますか?最も重要なのは色です。ただし、ここで色とスタイルの両方の完全な制限を理解したい.

メインフォームは

IsMdiContainer = false

サブフォームの追加

var f = new ChildForm(); 
clientPanel.Controls.Add(f); 
f.TopLevel = false; 
f.BringToFront(); 
f.Show(); 

IsMdiContainer = true を使用するオプションではないと思います。昔のことなので理由は思い出せませんが、必要なフォームの境界線を非表示にできないという問題があったと思います。

4

1 に答える 1

4

これは完全に正常です。Form.TopLevel プロパティを false に設定すると、ウィンドウはトップレベル ウィンドウのように動作しなくなります。これは子コントロールになり、動作は UserControl とほとんど区別がつきません。FormBorderStyle プロパティを変更するのを忘れたことを除いて、「キャプションが必要」および「サイズ変更可能な境界線が必要」スタイル フラグがオンになっています。

要求に応じてレンダリングするが、トップレベル ウィンドウのビジュアル スタイルを使用しなくなった Windows。フォールバックはクラシックな外観です。

うまくいかないのはそれだけではなく、フォームをアクティブにする機能も失われます。子コントロールにはアクティブ化状態がないため、トップレベル ウィンドウのみがアクティブ化されます。そのため、キャプションが適切に描画されなくなり、フォームにフォーカスを設定しても、常に「アクティブ化されていない」色を使用して描画されます。もう 1 つの深刻な問題は、タイトルバーのドラッグ機能がまだ機能しているため、ユーザーがウィンドウを親ウィンドウの外に移動でき、元のウィンドウに戻る方法がないことです。

唯一の合理的な解決策は、FormBorderStyle を None に設定して、これらがうまくいかないようにすることです。

独自の MDI スタイルのウィンドウ モデルを作成するつもりでしたが、MDI の醜さがなければ、これは良い解決策ではありません。ドッキング ライブラリを見てください。Weifenluo の無料の DockPanel Suite は非常に人気があります。

于 2012-12-16T17:02:55.407 に答える