2

私のアプリケーションで、フォームをメインの MDI 親フォームの子フォームとして作成すると、子フォームが Windows 7 の既定のシャドウ効果をフォームの背後に表示しなくなります。子フォームの影を表示するにはどうすればよいですか?

Form obj = Application.OpenForms["My_form"];
if (obj != null)
{
    obj.Focus();
}
else
{
    My_form c = new My_form();
    c.MdiParent = this;
    c.Show();
}
4

2 に答える 2

5

これは正常であり、完全に設計によるものです。MDI 子ウィンドウはトップレベル ウィンドウではなく、MDI 親ウィンドウでホストされるように設計された特殊なタイプの子ウィンドウです。

Windows Vista および 7 の Aero 効果を担当するデスクトップ ウィンドウ マネージャー (DWM) は、ドロップ シャドウとガラスの透明度を最上位のウィンドウに追加するだけです。MDI 子ウィンドウは、この処理の対象外です。実際、欠けているのは影だけではありません。Aero Basic テーマを使用して描画されているように見えますが、他のすべてに Aero テーマを使用しているマシンではかなり視覚的に不快です。

残念ながら、MDI から完全に切り替える以外に、これを修正する方法はありません。いずれにせよ、複数ドキュメント インターフェイスは最近ではほとんど非推奨になっています。このようなインターフェイスは、当初の予想よりも使いにくく、特に Microsoft 独自のソフトウェアによって、ほぼ完全に使用されなくなりました。Microsoft Office では、MDI を使用するのではなく、複数のトップレベル ウィンドウを使用していることに気付くでしょう。おそらく、独自のソフトウェアで同じことを行うことを検討する必要があります。

MDI のもう 1 つの一般的な代替手段は、Web ブラウザーで一般的に使用されるタブ付きインターフェースです。ここでは、単一の最上位ウィンドウがあり、すべての子ウィンドウがこのメイン ウィンドウの上部に「タブ」として表示されます。ユーザーは、独立した MDI の子としてではなく、タブとして子ウィンドウをより簡単かつ直感的に切り替えることができます。

于 2012-07-23T10:40:18.583 に答える