DOBON.NET DOBON.NETプログラミング掲示板過去ログ

MDIアプリ実行時に追加するメニューのマージ

環境/言語:[OS : Windows 7 / 言語 : Visual Basic .NET / .NET Framework : 4]
分類:[.NET]

【解決したい問題】

現在、『MDIアプリケーションのメニューのマージ』(http://dobon.net/vb/dotnet/form/mdimergemenu.html)を
参照し、MDIアプリを開発中です。

親フォームのメニューに後続するような形で子フォーム側のメニュー([ChildItem1])項目を合成して表示させ
たいのですが、実行してみると親フォームには親フォームのメニュー項目([Item1]・[Item2])のみ表示され、
子フォームのメニュー項目は子フォームに表示されます(合成されません)。
下記の記述の何処が不味いのでしょうか?

≪親フォーム≫
Public Class Form1
    Private MenuStrip1 As New MenuStrip
    Private Item1ToolStripMenuItem As New ToolStripMenuItem
    Private Item2ToolStripMenuItem As New ToolStripMenuItem
    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Me.IsMdiContainer = True
        Item1ToolStripMenuItem.Text = "Item1"
        Item2ToolStripMenuItem.Text = "Item2"
        Me.Controls.Add(MenuStrip1)
        MenuStrip1.Items.Add(Item1ToolStripMenuItem)
        MenuStrip1.Items.Add(Item2ToolStripMenuItem)
    End Sub
    Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
        Dim f As New Form2
        f.MdiParent = Me
        f.Show()
    End Sub
End Class

≪子フォーム≫
Public Class Form2
    Private MenuStrip1 As New MenuStrip
    Private ChildItem1ToolStripMenuItem As New ToolStripMenuItem
    Private Sub Form2_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        'MenuStrip1.Visible = False
        ChildItem1ToolStripMenuItem.Text = "ChildItem1"
        ChildItem1ToolStripMenuItem.MergeAction = MergeAction.Append
        Me.Controls.Add(MenuStrip1)
        MenuStrip1.Items.Add(ChildItem1ToolStripMenuItem)
    End Sub
End Class

【解決するために何をしたか】

親フォーム/子フォームのメニューを、フォームデザイナで追加して実行した場合はTipsの通りに動作する
のですが、実行時に動的に作成して実行した場合、子フォームのメニュー項目が親フォームのメニューに追加さ
れません。

【追加事項】

開発中アプリの要件により、メニュー項目は実行時に動的に追加する事が必要(設定ファイルからメニュー項目
の情報の一部を読み込んで編集するため)なため、フォームデザイナでのメニュー追加はできないんです。
添付ファイル: 1389249331.png (27 KB)
Form1 側で MainMenuStrip が設定されていないからだと思われます。
MainMenuStrip = MenuStrip1 を Load イベントの末尾に加えれば動きは変わると思います。
(それで十分かどうかの検証は不十分)
Azuleanさん、アドバイス有難うございます。
子フォームのメニュー項目が親フォームのメニューに追加されました。
親フォームのメニューをフォームデザイナで追加した際、親フォームのプロパティウィンドウでMainMenuStripプロパティにMenuStripの名称が指定されてるのは気付いてたんですが、これがポイントだとは考えてなかったです。お恥ずかしい。
添付ファイル: Test05_1.png (25 KB)
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板