5

MDI コンテナーであるメイン フォームを持つ .NET C# アプリケーションに取り組んでいます。ユーザーが MDI 子を最大化すると、Windows は、子のアイコンと右側のシステム ボタンを持つコンテナ Form のタイトル バーのすぐ下にコントロール ストリップを描画します。基本的に、このストリップを非表示にし、カスタム コントロールを使用して同じ機能を提供する必要があります。

Windows がこの MDI ストリップを描画しないようにする方法はありますか?

4

3 に答える 3

8

実際、フォームのMainMenuStripプロパティにダミーのMenuStripコントロールを割り当てることで(フォームのControlsコレクションに配置せずに)、このことをフォームから削除する簡単で興味深い方法を見つけました。

private void OnForm_Load(object sender, EventArgs e)
{
    this.MainMenuStrip = new MenuStrip();
}

これにより、フォームはその機能をデフォルトのメニューストリップに委任するため、デフォルトのMDIキャプションが描画されなくなります。MenuStripコントロールは、フォームのControlsコレクションに含まれていないため、表示されません。したがって、子が最大化されたときに厄介なMDIメニューを非表示にするために使用されるダミーメニューとして機能します。

于 2009-06-25T09:07:29.707 に答える
0

数年前のこの会話は、それを行う方法がないことを示唆しており、実際にMDIインターフェイスを使用する代わりに、メインフォームでユーザーコントロールを使用することになりました。

http://answers.google.com/answers/threadview/id/135136.html

私がオンラインで見つけることができる他のすべてのスレッドは、答えがないか行き止まりで放棄されています。とても面倒で、ネイティブに利用できるものでなければ、この機能は信じられません。

于 2009-06-23T16:16:02.617 に答える
0

すべてのフォームの 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
于 2010-12-10T20:44:43.040 に答える