MDI コンテナーであるメイン フォームを持つ .NET C# アプリケーションに取り組んでいます。ユーザーが MDI 子を最大化すると、Windows は、子のアイコンと右側のシステム ボタンを持つコンテナ Form のタイトル バーのすぐ下にコントロール ストリップを描画します。基本的に、このストリップを非表示にし、カスタム コントロールを使用して同じ機能を提供する必要があります。
Windows がこの MDI ストリップを描画しないようにする方法はありますか?
MDI コンテナーであるメイン フォームを持つ .NET C# アプリケーションに取り組んでいます。ユーザーが MDI 子を最大化すると、Windows は、子のアイコンと右側のシステム ボタンを持つコンテナ Form のタイトル バーのすぐ下にコントロール ストリップを描画します。基本的に、このストリップを非表示にし、カスタム コントロールを使用して同じ機能を提供する必要があります。
Windows がこの MDI ストリップを描画しないようにする方法はありますか?
実際、フォームのMainMenuStripプロパティにダミーのMenuStripコントロールを割り当てることで(フォームのControlsコレクションに配置せずに)、このことをフォームから削除する簡単で興味深い方法を見つけました。
private void OnForm_Load(object sender, EventArgs e)
{
this.MainMenuStrip = new MenuStrip();
}
これにより、フォームはその機能をデフォルトのメニューストリップに委任するため、デフォルトのMDIキャプションが描画されなくなります。MenuStripコントロールは、フォームのControlsコレクションに含まれていないため、表示されません。したがって、子が最大化されたときに厄介なMDIメニューを非表示にするために使用されるダミーメニューとして機能します。
数年前のこの会話は、それを行う方法がないことを示唆しており、実際にMDIインターフェイスを使用する代わりに、メインフォームでユーザーコントロールを使用することになりました。
http://answers.google.com/answers/threadview/id/135136.html
私がオンラインで見つけることができる他のすべてのスレッドは、答えがないか行き止まりで放棄されています。とても面倒で、ネイティブに利用できるものでなければ、この機能は信じられません。
すべてのフォームの Load イベントにコードを追加するよりも簡単な方法があります。このコードを MdiParent フォームに配置し、menustrip コントロールに使用している実際の名前を MenuStrip に置き換えます。
Private Sub MenuStrip_ItemAdded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemEventArgs) Handles MenuStrip.ItemAdded
Dim s As New String(e.Item.GetType().ToString())
If s = "System.Windows.Forms.MdiControlStrip+SystemMenuItem" Then
e.Item.Visible = False
End If
End Sub