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

わんくま同盟

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

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

ツリー一括表示

MDIフォーム親画面、子画面のメニューマージについて /うみ (18/01/29(Mon) 16:37) #86439
Re[1]: MDIフォーム親画面、子画面のメニューマージについて /daemon (18/02/01(Thu) 14:48) #86472
  └ Re[2]: MDIフォーム親画面、子画面のメニューマージについて /うみ (18/02/05(Mon) 09:17) #86482
    └ Re[3]: MDIフォーム親画面、子画面のメニューマージについて /うみ (18/02/05(Mon) 09:28) #86483
      └ Re[4]: MDIフォーム親画面、子画面のメニューマージについて /Hongliang (18/02/05(Mon) 13:33) #86486
        └ Re[5]: MDIフォーム親画面、子画面のメニューマージについて /うみ (18/02/09(Fri) 13:37) #86532 解決済み


親記事 / ▼[ 86472 ]
■86439 / 親階層)  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が表示されない原因、対処方法がわかる方いらっしゃいましたら、
ご教示願います。
[ □ Tree ] 返信 編集キー/

▲[ 86439 ] / ▼[ 86482 ]
■86472 / 1階層)  Re[1]: MDIフォーム親画面、子画面のメニューマージについて
□投稿者/ daemon (1回)-(2018/02/01(Thu) 14:48:34)
MergeIndexは適切に設定されていますか?
[ 親 86439 / □ Tree ] 返信 編集キー/

▲[ 86472 ] / ▼[ 86483 ]
■86482 / 2階層)  Re[2]: MDIフォーム親画面、子画面のメニューマージについて
□投稿者/ うみ (13回)-(2018/02/05(Mon) 09:17:19)
No86472 (daemon さん) に返信
> MergeIndexは適切に設定されていますか?

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

挙動は変わりませんでした。
[ 親 86439 / □ Tree ] 返信 編集キー/

▲[ 86482 ] / ▼[ 86486 ]
■86483 / 3階層)  Re[3]: MDIフォーム親画面、子画面のメニューマージについて
□投稿者/ うみ (14回)-(2018/02/05(Mon) 09:28:23)
No86482 (うみ さん) に返信
> ■No86472 (daemon さん) に返信
>>MergeIndexは適切に設定されていますか?
>
> 返信が遅くなり申し訳ありません。
> MergeIndexは、
> ・デフォルトの-1
> ・親画面、子画面に同一番号を設定
> の両方を試しましたが、
>
> 挙動は変わりませんでした。
[ 親 86439 / □ Tree ] 返信 編集キー/

▲[ 86483 ] / ▼[ 86532 ]
■86486 / 4階層)  Re[4]: MDIフォーム親画面、子画面のメニューマージについて
□投稿者/ Hongliang (611回)-(2018/02/05(Mon) 13:33:46)
要件が曖昧な感じですが…。
今提示されている条件であれば、子画面の各メニュー項目のMergeActionをAppendにすればいいだけじゃないでしょうか。
// マージされる側、つまり親画面の方にMergeAction/MergeIndexを設定する意味はありません。
[ 親 86439 / □ Tree ] 返信 編集キー/

▲[ 86486 ] / 返信無し
■86532 / 5階層)  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
解決済み
[ 親 86439 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -