2016-04-15 6 views
0

私はContextMenuStripから派生したクラスを持っています。このクラスは、標準のボタンがあり、プロジェクト全体で使用されています。私は、フォーム自体は、追加するためのコードを扱うことをしたい場所メニューボタンのイベントハンドラを変更するには?

cmsMenu = new ItemMenu(this.components); 

は今、私は特定の状況があります。

public class ItemMenu : ContextMenuStrip 
{ 
    public ItemMenu (IContainer container) 
     : base(container) 
    { 
     MenuItemAdd = new ToolStripMenuItem("Add", null, AddNew); 

     this.Items.AddRange(new ToolStripItem[] 
     { 
      mnuAdd, 
     }); 
    } 

    public void AddNew(object sender, EventArgs e) 
    { 
     //Code to add new item here... 
    } 
} 

とフォームで項目。

上記のクラスを変更すると、デフォルトのケースではクラス自体がアクションを処理するようになりますが、特定の状況では他のメソッド(イベント/代理人)が使用されます。

答えて

0

次の変更は、それが仕事を得るために必要とされた:

public class ItemMenu : ContextMenuStrip 
{ 
    public event EventHandler AddNewItem; 

    public ItemMenu (IContainer container) 
     : base(container) 
    { 
     MenuItemAdd = new ToolStripMenuItem("Add", null, AddNew); 

     this.Items.AddRange(new ToolStripItem[] 
     { 
      mnuAdd, 
     }); 
    } 

    public void AddNew(object sender, EventArgs e) 
    { 
     EventHandler handler = AddNewItem; 
     if (handler != null) 
     { 
      handler(sender, e); 
     } 
     else 
     { 
      OnAddNew(sender, e); 
     } 
    } 

    protected void OnAddNew(object sender, EventArgs e) 
    { 
     //Code to add new item here... 
    } 
} 
関連する問題