C#でMDIフォームを使っていて、子フォームのメニューを親フォームにマージする場合のメモ。
基本的には方法 : MDI ドロップダウン メニューに MenuStrip を挿入する (Windows フォーム)を参考にすればできます。親フォームのマージしたいトップレベルメニュー項目と、子フォームに置くメニューのトップレベルメニュー項目名を同じにすればいいようですね*1。そして、子フォームのメニュー項目内のメニューアイテムのMergeIndexを、メニュー項目を挿入したいインデックスに合わせます(わかりにくい場合は下の例示参照)。
ただし、そのままだと子メニューの"ファイル"というトップレベルメニューのみが残って表示されてしまうので、このメニュー項目のVisibleをFalseに設定、(子フォームでDockを使ってフォーム部品をレイアウトしている場合に限り、)子フォームのMenuStripのDockをNoneに設定してあげればいいです。他に方法がありそうな気もしますが…、まあ、とりあえずこれでうまくいきましたので、これにて。
以下例示。
フォーム1
フォーム1(親フォーム)が以下のようになっている場合
- ファイル
- アップロード
- -
- メニューを追加したい場所
- サイトの作成
- サイトの削除
- -
- 終了
- ・・・
フォーム2
フォーム2(子フォーム)には、以下のメニューを追加します
- ファイル(MergeIndex=-1, MergeAction=MatchOnly)
- 保存(MergeIndex=2, MergeAction=Insert)
- 保存して閉じる(MergeIndex=3, MergeAction=Insert)
- 保存せずに閉じる(MergeIndex=4, MergeAction=Insert)
MergeIndexで指定したとおり、親メニューの上から2番目に挿入された と考えればいいみたいですね。
*1:おそらく、例のとおりMergeActionがMatchOnlyの場合