Windows フォームの MenuStrip コントロールへのメニュー項目のマージ

マルチドキュメント インターフェイス (MDI) アプリケーションでは、メニュー項目またはメニュー全体を子フォームから親フォームのメニューにマージできます。

このトピックでは、MDI アプリケーションでのメニュー項目のマージに関連する基本的な概念について説明します。

一般的な概念

マージ プロシージャには、ターゲットとソースの両方のコントロールが関係します。

  • ターゲットは、メニュー項目のマージ先となるメインまたは MDI 親フォーム上の MenuStrip コントロールです。

  • ソースは、ターゲットのメニューにマージするメニュー項目を含んだ MDI 子フォーム上の MenuStrip コントロールです。

MdiWindowListItem プロパティでは、現在の MDI 親フォームの MDI 子のタイトルを、どのメニュー項目のドロップダウン リストに設定するかを指定します。 典型的な例としては、 [ウィンドウ] メニューで現在開いている MDI 子をリストに表示するなどします。

IsMdiWindowListEntry プロパティでは、MDI 子フォーム上の MenuStrip からどのメニュー項目を取得するかを指定します。

メニュー項目のマージは、手動でも自動でも行えます。 どちらの場合も、メニュー項目は同じ方法でマージされますが、このトピックで後述する「手動マージ」と「自動マージ」のセクションで説明されているように、マージのアクティブ化の方法が異なります。 手動マージと自動マージのいずれの場合も、各マージ操作は、次回のマージ操作に影響します。

MenuStrip のマージでは、それらは複製されるのではなく、1 つの ToolStrip から別の ToolStrip へとメニュー項目が移動されます (MainMenu の場合と同様)。

MergeAction の値

ソース MenuStrip のメニュー項目に対するマージ操作は、MergeAction プロパティを使用して設定します。

次の表は、使用可能なマージ操作の意味と、一般的な用途について説明したものです。

MergeAction の値 説明 一般的な用途
Append (既定) ソース項目を、ターゲット項目のコレクションの末尾に追加します。 プログラムの一部がアクティブになったときに、メニュー項目をメニューの末尾に追加する。
Insert ソース項目に対して設定された MergeIndex プロパティによって指定された場所で、ソース項目をターゲット項目のコレクションに追加します。 プログラムの一部がアクティブになったときに、メニュー項目をメニューの中間または先頭に追加する。

MergeIndex の値が両方のメニュー項目で同じである場合、それらは逆順で追加されます。 元の順序を維持するには、MergeIndex を適切に設定してください。
Replace 一致するテキストを検索するか、または、一致するテキストが見つからない場合は MergeIndex の値を使用して、一致するターゲット メニュー項目をソース メニュー項目に置き換えます。 ターゲット メニュー項目を、同じ名前のソース メニュー項目で置き換える。
MatchOnly 一致するテキストを検索するか、または、一致するテキストが見つからない場合は MergeIndex の値を使用して、すべてのドロップダウン項目をソースからターゲットに追加します。 メニュー項目をサブメニューに挿入または追加したり、サブメニューからメニュー項目を削除したりするメニュー構造を構築する。 たとえば、MDI 子からメインの MenuStrip[名前を付けて保存] メニューにメニュー項目を追加することもできます。

MatchOnly を使用すると、操作は何も実行せずに、メニュー構造内を移動することができます。 これは、後続の項目を評価する目的に使用できます。
Remove 一致するテキストを検索するか、または、一致するテキストが見つからない場合は MergeIndex の値を使用して、ターゲットから項目を削除します。 ターゲットの MenuStrip からメニュー項目を削除する。

手動マージ

自動マージでは、MenuStrip コントロールしか操作されません。 ToolStrip コントロールや StatusStrip コントロールなど、他のコントロールの項目を組み合わせるには、必要に応じてコード内で Merge メソッドと RevertMerge メソッドを呼び出して、それらを手動でマージする必要があります。

自動マージ

MDI アプリケーションの自動マージは、ソース フォームをアクティブ化することで実行できます。 MDI アプリケーションで MenuStrip を使用するには、MainMenuStrip プロパティをターゲットの MenuStrip に設定して、ソースの MenuStrip で実行されたマージ操作がターゲットの MenuStrip に反映されるようにします。

自動マージをトリガーするには、MDI ソースで MenuStrip をアクティブにします。 アクティブ化されると、ソースの MenuStrip が MDI ターゲットにマージされます。 新しいフォームがアクティブになると、直近のフォームでマージが元に戻され、新しいフォーム上でトリガーされます。 この動作を制御するには、各 ToolStripItem で必要に応じて MergeAction プロパティを設定し、それぞれの MenuStripAllowMerge プロパティを設定します。

関連項目