C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

MDIフォーム親画面、子画面のメニューマージについて

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■86439 / inTopicNo.1)  MDIフォーム親画面、子画面のメニューマージについて
  
□投稿者/ うみ (11回)-(2018/01/29(Mon) 16:37:56)

分類:[C#] 

お世話になります。

VS2015のC#でMDIフォームを作成しているのですが、
その親画面と子画面のメニューマージで困っています。

使用しているコントロールは
メニューバーは「MenuStrip」
メニュー、サブメニューは「ToolStripMenuItem」
セパレータは、「ToolStripSeparator」
です。


親画面メニューは
メニュー1
├サブメニュー1

├セパレータ1

├サブメニュー2

├セパレータ2

└サブメニュー3


子画面メニューは
メニュー1
├セパレータ1

├サブメニュー2

├セパレータ2

└サブメニュー3


となっています。


親画面、子画面でMergeActionを以下のとおり設定し、
※メニュー1、サブメニュー1は親画面のみ

メニュー1.MergeAction = MergeAction.MatchOnly;
サブメニュー1.MergeAction = MergeAction.Replace;
サブメニュー2.MergeAction = MergeAction.Replace;
サブメニュー3.MergeAction = MergeAction.Replace;
セパレータ1.MergeAction = MergeAction.Replace;
セパレータ2.MergeAction = MergeAction.Replace;

親画面の以下コントロールのVisibleをfalseにし、
・セパレータ1
・サブメニュー2
・セパレータ2
・サブメニュー3

子画面を起動すると、
メニュー1
├サブメニュー1

├セパレータ1

├サブメニュー2

└サブメニュー3
と表示され、「セパレータ2」が表示されなくなってしまいます。

私が実現したい表示は、
メニュー1
├サブメニュー1

├セパレータ1

├サブメニュー2

├セパレータ2

└サブメニュー3
としたいです。

セパレータ2が表示されない原因、対処方法がわかる方いらっしゃいましたら、
ご教示願います。
引用返信 編集キー/
■86472 / inTopicNo.2)  Re[1]: MDIフォーム親画面、子画面のメニューマージについて
□投稿者/ daemon (1回)-(2018/02/01(Thu) 14:48:34)
MergeIndexは適切に設定されていますか?
引用返信 編集キー/
■86482 / inTopicNo.3)  Re[2]: MDIフォーム親画面、子画面のメニューマージについて
□投稿者/ うみ (13回)-(2018/02/05(Mon) 09:17:19)
No86472 (daemon さん) に返信
> MergeIndexは適切に設定されていますか?

返信が遅くなり申し訳ありません。
MergeIndexは、
・デフォルトの-1
・親画面、子画面に同一番号を設定
の両方を試しましたが、

挙動は変わりませんでした。
引用返信 編集キー/
■86483 / inTopicNo.4)  Re[3]: MDIフォーム親画面、子画面のメニューマージについて
□投稿者/ うみ (14回)-(2018/02/05(Mon) 09:28:23)
No86482 (うみ さん) に返信
> ■No86472 (daemon さん) に返信
>>MergeIndexは適切に設定されていますか?
>
> 返信が遅くなり申し訳ありません。
> MergeIndexは、
> ・デフォルトの-1
> ・親画面、子画面に同一番号を設定
> の両方を試しましたが、
>
> 挙動は変わりませんでした。
引用返信 編集キー/
■86486 / inTopicNo.5)  Re[4]: MDIフォーム親画面、子画面のメニューマージについて
□投稿者/ Hongliang (611回)-(2018/02/05(Mon) 13:33:46)
要件が曖昧な感じですが…。
今提示されている条件であれば、子画面の各メニュー項目のMergeActionをAppendにすればいいだけじゃないでしょうか。
// マージされる側、つまり親画面の方にMergeAction/MergeIndexを設定する意味はありません。
引用返信 編集キー/
■86532 / inTopicNo.6)  Re[5]: MDIフォーム親画面、子画面のメニューマージについて
□投稿者/ うみ (15回)-(2018/02/09(Fri) 13:37:21)
daemon様、Hongliang様
ご教示いただきありがとうございます。
返信が遅くなり申し訳ありません。

今回の不明点は、
サブメニュー(ToolStripMenuItem)はマージできるのに、
セパレータ(ToolStripSeparator)が
マージできないのはなぜ?でした。

下記サイトのマージの説明に「Textプロパティを使ってマージする」と記載されており、
サブメニューとセパレータの違いはTextプロパティの設定の有無だったため、
セパレータのTextプロパティ(※)にNameプロパティと同じ値を設定したところ、
私が実現したかったマージを行うことができました。
※セパレータのテキストプロパティはデザイナ―にはないため、
 コンストラクタで設定するようにしました。
 そもそも、設定してよいものかわかりませんが。。。

http://dobon.net/vb/dotnet/form/mdimergemenu.html
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ