0

私の調査と理解から、ContextMenuStripはContextMenuの後継となるはずであり、コードを最新の状態に保つという精神で、ContextMenuのそのようなインスタンスの1つを置き換えることに着手しました。

以前は、MenuItemにクリックハンドラーを備えたアイテムのサブメニューを提供するために、次のようなことをしていました。

    MenuItem[] clearMenu = {    
                                new MenuItem("All", clear_all_click),
                                new MenuItem("Text", clear_text_click),
                                new MenuItem("Images", clear_images_click),
                                new MenuItem("Audio", clear_audio_click) 
                           };

    notifyIcon.ContextMenu.MenuItems.Add(new MenuItem("Clear", clearMenu));

ここに画像の説明を入力してください

単純なものが欠けているかどうかはわかりませんが、ContextMenuStripを使用して同様の機能を実現するにはどうすればよいですか?ToolStripMenuItemには、それ自体の配列を追加してサブメニューを形成できるオーバーロードされたコンストラクターはありません。次のように、ContextMenuStripから特定のアイテムインデックスを選択してアイテムを追加する方法もありません。

 notifyIcon.ContextMenuStrip.Items["Clear"].Add

ToolStripItemの配列を含むサブメニューをインスタンス化できるコンストラクターがありますが、これは抽象クラスであるため、直接呼び出すことはできません。

考え?それとも、木々の間から森が見えないのでしょうか。

4

1 に答える 1

1

あなたはあなたが望むことを正確に行うことができます。ただし、キー名を介してアクセスするには、名前を設定する必要があります。

ToolStripItem[] newItems = {
                    new ToolStripMenuItem("All", null, DoThis),
                    new ToolStripMenuItem("Text", null, DoThis)
                };

this.contextMenuStrip1.Items.Add(new ToolStripMenuItem("Clear", null, newItems) {Name="Clear"});

var clearItem = this.contextMenuStrip1.Items["Clear"] as ToolStripMenuItem;
于 2012-05-30T18:42:14.847 に答える