前提・実現したいこと
サブメニューから親メニューを取得するには、どういったコードを書けばよいでしょうか?
以下のようにメニューを作成し、サブメニュー3をクリックしたら、親階層のサブメニュー2を取得できるような、
任意のメニューでこのように取得可能なコードについてです。
やりたいこととしては、任意のメニューをクリックしたら、親のメニューアイテムを再帰的に取得して、
全てにチェックを付けるような実装を考えています。
例えば、サブメニュー3をクリックしたら、サブメニュー3にチェックを付けて、さらにサブメニュー2とサブメニュー1にもチェックを付け、
再び、サブメニュー3をクリックしたら、それらすべてのメニューのチェックを外す実装です。
その実装を考えている上で、サブメニューから、親メニューが取得できないため、今回の質問をさせていただきました。
ご教示お願いします。
試したこと
サブメニュー3のクリック処理において、
1階層上では、ToolStripDropDownMenuが取得されることがわかりました。
C#
1 private void SubMenu3_ToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 Console.WriteLine(((ToolStripMenuItem)sender).GetCurrentParent()); 4 // System.Windows.Forms.ToolStripDropDownMenu, Name: , Items: 1 5 } 6
GetCurrentParent()を2回呼び出すとエラーが発生していまいます。
C#
1 private void SubMenu3_ToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 Console.WriteLine(((ToolStripMenuItem)sender).GetCurrentParent().GetCurrentParent()); 4 }
エラーメッセージ。
エラー CS1061 'ToolStrip' に 'GetCurrentParent' の定義が含まれておらず、 型 'ToolStrip' の最初の引数を受け付けるアクセス可能な拡張メソッド 'GetCurrentParent' が見つかりませんでした。 using ディレクティブまたはアセンブリ参照が不足していないことを確認してください。
また、以下のコードも試してみましたが、何も出力されませんでした。
C#
1 private void SubMenu3_ToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 Console.WriteLine(((ToolStripMenuItem)sender).GetCurrentParent().Parent); 4 }
補足情報(FW/ツールのバージョンなど)
Visual Studio 2019
.NET Framework 4.7.2
追記
ウォッチを試してみた所、OwnerItemが見つかりませんでした。
①まず、以下のようにブレークポイントを仕掛けました。
②デバッグして、ブレークポイントで止まって、変数を確認してみましたが、中にOwnerItemが見つかりませんでした。
ログでは、取得できていることは確認できました。
C#
1 private void SubMenu3_ToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 ToolStripMenuItem mItem = (ToolStripMenuItem)sender; 4 Console.WriteLine(mItem.OwnerItem); // サブメニュー2 5 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/09/19 17:52
2021/09/19 22:26 編集
退会済みユーザー
2021/09/20 05:35