2016-05-28 16 views
-1

私はMDIフォームでプロジェクトに取り組んでいます。私の問題は、MDIの子ボーダーレスフォームを開いたときです。私はこれを見た瞬間のために...VB.NET - ボーダーレスMDI子フォームの問題

enter image description here

し、[OK]のように見える...

enter image description here

これを引き起こす可能性がありますどのような任意のアイデア? タイトルバーとボトムバーはカスタムコントロールです。 FormBorderStylenoneです!

+0

私は本当に私の質問がdownvoted理由を知りたいですか? –

答えて

1

Windowsは、実際にはMDI子ウィンドウの境界線スタイルの変更をサポートしていません。オペレーティングシステムで実行できますが、サポートされていない構成であり、バグが発生する可能性が非常に高いです。

WinFormsは、これらのタイプの懸念からあなたを守ることになっているため、これは実際の設計上の欠陥です。 MDI子のFormBorderStyleプロパティを変更しようとすると例外がスローされるはずです。 MDIサポートを実装することは、おそらくマイクロソフトの最大の優先事項ではありませんでした。 WinFormsが2001年に最初にリリースされたときでさえ、本質的に死にました。 MDIパラダイム全体はサポートされなくなり、ソフトウェアでの使用は推奨されなくなりました。

これまで見てきたように、ハックしてそのように動作させることができます。しかし、Windowsはそこにあると思われる非クライアント領域を描画しようとしているので、このちらつきの効果が得られます。

二つのより良いアイデア:廃止されたMDIのパラダイムを使用して

  1. 停止し、あなたのUIを実装するために異なる、よりユーザーフレンドリーな方法を見つけます。たとえば、別々の最上位フォーム。または一連のタブ。

  2. オペレーティングシステムの標準的な外観と壊れた醜いカスタム "スキン"を使用しないようにしてください。ユーザーがカスタマイズしたり無効にしたりすることはできません。

あなたは絶対にこれを行うと、それが良い見えるようにしたいを持っている場合は

は、あなたは、本質的にMDIパラダイムを自分で再実装する必要があります。事実上の親として機能する標準フォームを作成します。次に、MDI子フォームを使用する代わりに、一連のUserControlクラス(または Falseに設定された TopLevelプロパティを持つフォーム)を使用します。次に、システムで描画された枠線を削除して、すべてを自分で描画することができます。 UserControlオブジェクトは、他のコントロールと同様に、「メイン」フォームの子として表示されます。ここまでは順調ですね。今では、醜い部分は、これらの子供たちをあなた自身が管理する責任があるということです。必要なときにそれらを表示し、必要に応じてそれらを隠し、ユーザーが「メイン」フォーム内でそれらをドラッグできるようにして、「最大化」と「最小化"それらをするためにあなた自身のコードを書く必要があります。私はそれを強く勧めます。この種のことを正しくすることは、いったん終わったら、むしろ難しく、疑わしい価値があるでしょう。

+0

アドバイスをいただきありがとうございます! –

関連する問題